一. 闭包:理解(1):就是一个函数,捕获作用域内的外部绑定(例如:不是自己的参数)。这些绑定是为之后使用(即使在该作用域已结束)而定义的。(不用var的变量是全局变量)
理解(2):闭包就是能够读取其他函数内部变量的函数(定义在一个函数内部的函数)。
(1)变量的作用域有两种:全局变量和局部变量;
由于在函数内部可以读取外面的全局变量,而外部的全局变量,不能读取内部的局部变量,所以就需要方法来实现。
例如:
function f1(){ var n=999; return function f2(){ return n; } } var result=f1(); // 999 由于要在外面得到发f1()里面的变量n,能从内部实现闭包进行得到。所以f2()就是上面说的闭包。
(2)闭包的用途:1、可以读取函数内的变量。2、就是让这些变量始终保存在内存中。
例如:
function f1(){ var n=999; nAdd=function(){n+=1} return function f2(){ console.log(n); } } var result=f1(); result(); // 999 nAdd(); result(); //1000 通过这个可以看出f1()中的变量n,一直保存在内存中。不会被垃圾回收机制回收
(3)闭包的缺点:通过闭包使用的函数变量会一直保存在内存中,这样就会造成内存消耗很大,从而影响远行速率。所以要适当的使用闭包。