首页 > 代码库 > JavaScript闭包(closure)
JavaScript闭包(closure)
闭包(closure)
闭包是javascript语言的一个难点,需要有足够的逻辑思维能力。
一、变量的作用域
变量分为两种:全局变量和局部变量。
1.在函数内部是可以直接读取到全局变量的,如下:
var n = 10; function fn(){ alert(n); } fn(); alert结果为10.
2.在函数外部肯定是无法读取到函数内的局部变量的,如下
function f(){ var n = 20; }
f(); alert(n); 程序会报错:n is no defined.
注意:大家在这个地方需要注意是,在函数内部声明变量的时候,一定加var。如果不加,相当于声明了一个全局变量。
二、如何在外部可以读取到局部变量了。
我们这里就引入这个闭包,来实现,就是在一个函数内在引入一个函数。
function f1(){ var n = 10; function f2(){ alert (n); } return f2; } var result = f1(); result(); 结果就为:10
三、什么叫闭包
闭包:就是能够读取其它函数内部函数的变量。
其实可以简单的理解为:定义在一个函数内部的函数,像比如上面例子中的函数f2()。
闭包在本质上就是将函数内部和函数外部连接在一起的桥梁。
四、闭包的用处
1.可以读取函数内部的变量。
2.变量持久化(变量的值始终会保存在内存中)。
function f1(){ var n = 10; return function(){ n++; alert(n); } } var result = f1(); //外部函数赋给变量result; result(); //result函数第一次执行,结果为11; result(); //result函数第二次执行,结果为12,实现了累加,
上面这个例子就完美诠释了变量的持久化。
3.模块化代码,减少全局变量的污染。
var abc = (function(){ //abc为外部匿名函数的返回值 var a = 1; return function(){ a++; alert(a); } })(); abc(); //2 ;调用一次abc函数,其实是调用里面内部函数的返回值 abc(); //3
五、使用闭包应注意的问题
1.由于闭包会使函数内部中的变量都保存在来,内存消耗很大。所以不能滥用闭包,否则会造成网页的性能问题。
六、最后告诉大家:其实闭包是Javascript语言的一个难点,也是它的特色,很多高级应用才会用到闭包,所以刚学的同学不懂也不要着急,在以后的不断学习中,会慢慢理解的!
JavaScript闭包(closure)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。