使用闭包,为什么要有一个变量c来接收a?视频里说不然接受完就没有了是什么意思?
function a(){ var i=0; function b(){ i++; alert(i); } return b; } var c=a(); c(); c();
function a(){ var i=0; function b(){ i++; alert(i); } return b; } var c=a(); c(); c();
2016-05-28
首先,闭包本身是指有权访问另一个函数作用域中的变量的函数,在闭包里return内层的函数是为了内层函数能在外面被调用,这跟闭包本身的概念无关。
在函数a里:
return b
是返回函数b的引用(而不是调用),也就是一个指向函数b的指针,所以
var c=a();
就相当于c=b,执行c函数就相当于执行函数b。
老师的这个例子里体现了闭包的两个作用:
一是隐藏(保护)一个变量(这里就是局部变量i),局部变量在外部不能直接访问,在闭包里定义一个函数b可以访问i,return函数b就能在外部通过函数b间接访问i了。要注意的是,如果不用c来接收a();,函数a执行完之后,其局部活动对象(包括函数b)会被销毁,此时就不能在外部调用函数b了。这也引出了闭包的另一个作用:内部函数会将外部函数的活动对象添加到它的作用域链中,外部函数执行完毕后,其活动对象不会被销毁,仍然留在内存中。
举报