JavaScript闭包简单学习

因为实验室项目要用,所以最近在学习OpenLayers,但是从来没有做过前端呀,坑爹的,硬着头皮上吧

反正正好借这个机会学习一下JS,本来对这门语言也挺感兴趣的,多多少少写过一下JS代码了,差不多学一些里面的特殊概念了

以前一直觉得闭包这个词太神秘,所以先选这个概念了

参考资料:《JavaScript高级程序设计》

      博客:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures(主要是这一篇,代码来源)

         http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html

         http://coolshell.cn/articles/6731.html

代码里面有注释,就不写太多了。

 1 <!--闭包是指有权访问另一个函数作用域的变量的函数-->
 2 <!DOCTYPE html>
 3 <html lang="en">
 4 <head>
 5     <meta charset="UTF-8">
 6     <title></title>
 7 </head>
 8 <body>
 9 <!--<a href="#" id="size-12">12</a>-->
10 <!--<a href="#" id="size-14">14</a>-->
11 <!--<a href="#" id="size-16">16</a>-->
12
13 <script language="JavaScript">
14 //  function makeFunc(){
15 //      var name = "Mozilla";
16 //      function displayName(){
17 //          alert(name);
18 //      }
19 //      return displayName;
20 //  }
21 //    var myFunc = makeFunc();
22 //    myFunc();
23
24 //    function makeAdder(x){
25 //        return function(y){
26 //            return x+y;
27 //        };
28 //    }
29 //    var add5 =makeAdder(5);
30 //    var add10=makeAdder(10);
31 //    document.writeln(add5(2));
32 //    document.writeln(add10(2));
33
34 //闭包允许将函数与其所操作的某些数据(环境)关连起来。这显然类似于面向对象编程。
35 //在面对象编程中,对象允许我们将某些数据(对象的属性)与一个或者多个方法相关联。
36 //    function makeSizer(size){
37 //        return function() {
38 //            document.body.style.fontSize = size + ‘px‘;
39 //        };
40 //    }
41 //    var size12 = makeSizer(12);
42 //    var size14 = makeSizer(14);
43 //    var size16 = makeSizer(16);
44 //
45 //    document.getElementById(‘size-12‘).onclick=size12;
46 //    document.getElementById(‘size-14‘).onclick=size14;
47 //    document.getElementById(‘size-16‘).onclick=size16;
48 //完成面向对象中的私有化
49 //    var Counter = (function(){
50 //        var privateCounter = 0;
51 //        function changeBy(val){
52 //            privateCounter+=val;
53 //        }
54 //        return {
55 //            increment:function(){
56 //                changeBy(1);
57 //            },
58 //            decrement: function () {
59 //                changeBy(-1);
60 //            },
61 //            value:function(){
62 //                return privateCounter;
63 //            }
64 //        }
65 //    })();
66 //    alert(Counter.value());
67 //    Counter.increment();
68 //    Counter.increment();
69 //    alert(Counter.value());
70 //    Counter.decrement();
71 //    alert(Counter.value());
72 //如果不是因为某些特殊任务而需要闭包,在没有必要的情况下,在其它函数中创建函数是不明智的,
73 // 因为闭包对脚本性能具有负面影响,包括处理速度和内存消耗。
74
75 //例如,在创建新的对象或者类时,方法通常应该关联于对象的原型,而不是定义到对象的构造器中。
76 // 原因是这将导致每次构造器被调用,方法都会被重新赋值一次(也就是说,为每一个对象的创建)。
77
78 </script>
79 </body>
80 </html>

时间: 2024-09-30 14:26:12

JavaScript闭包简单学习的相关文章

django之JavaScript的简单学习2

前言:ajax预备知识:json进阶 1.JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.JSON是用字符串来表示Javascript对象: 请大家记住一句话:json字符串就是js对象的一种表现形式(字符串的形式) 既然我们已经学过python的json模块,我们就用它来测试下json字符串和json对象到底是什么 import json i=10 s='hello' t=(1,4,6) l=[3,5,7] d={'name':"yuan"

ajax 随笔 - 1 文章 - 141 评论 - 143 JavaScript 的简单学习2

https://www.cnblogs.com/yuanchenqi/articles/5997456.html AJAX 一 AJAX预备知识:json进阶 1.1 什么是JSON? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.JSON是用字符串来表示Javascript对象: 请大家记住一句话:json字符串就是js对象的一种表现形式(字符串的形式) 既然我们已经学过python的json模块,我们就用它来测试下json字符串和json对象到

Javascript闭包简单理解

提到闭包,想必大家都早有耳闻,下面说下我的简单理解.说实话平时工作中实际手动写闭包的场景并不多,但是项目中用到的第三方框架和组件或多或少用到了闭包.所以,了解闭包是非常必要的.呵呵... 一.什么是闭包简而言之,就是能够读取其他函数内部变量的函数.由于JS变量作用域的特性,外部不能访问内部变量,内部可以外部变量. 二.使用场景1. 实现私有成员.2. 保护命名空间,避免污染全局变量.3. 缓存变量. 先看一个封装的例子: var person = function () { // 变量作用域为函

[javascript] Promise简单学习使用

原文地址:http://www.cnblogs.com/dojo-lzz/p/4340897.html 解决回调函数嵌套太深,并行逻辑必须串行执行,一个Promise代表一个异步操作的最终结果,跟Promise交互的主要方式是通过他的then()方法来注册回调函数,去接收Promise的最终结果值 Promise相关的协议有PromiseA和PromiseA+ 定义一个类Promise 定义属性队列queue,初始化空数组[] 定义属性值value,初始化null 定义属性状态status,初始

javaScript的简单学习

JavaScript介绍 JavaScript跟java没半毛钱关系 JavaScript有三部分组成:ECMAScript,document object model,broswer object model 两种引入方式,直接在body后<script></script>或者文件导入<script src=""></script> JavaScript基础知识 变量  var iMyValue = 0, sMystring = &qu

学习Javascript闭包(Closure)

闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 下面就是我的学习笔记,对于Javascript初学者应该是很有用的. 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量. var n=999; function f1(){ alert(n); } f1(); // 999 另一方面,在函数外

JavaScript闭包(Closure)学习笔记

闭包(closure)是JavaScript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 下面就是我的学习笔记,对于JavaScript初学者应该是很有用的. 一.变量的作用域 要理解闭包,首先必须理解JavaScript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. JavaScript语言的特殊之处,就在于函数内部可以直接读取全局变量. var n=999; function f1() { alert(n); } f1(); // 999 另一方面,在函数

学习Javascript闭包

闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 下面就是我的学习笔记,对于Javascript初学者应该是很有用的. 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量. var n=999; function f1(){ alert(n); } f1(); // 999 另一方面,在函数外

JavaScript闭包学习笔记

原文:JavaScript闭包学习笔记 闭包(closure)是JavaScript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 下面就是我的学习笔记,对于JavaScript初学者应该是很有用的. 一.变量的作用域 要理解闭包,首先必须理解JavaScript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. JavaScript语言的特殊之处,就在于函数内部可以直接读取全局变量. 1 var n=999; 2 3 function f1() { 4 alert