闭包可以解决函数外部无法访问函数内部变量的问题
通过闭包我们可以让函数中的变量持久保持。来看。
function fn(){ var num = 0; return function(){ num+=1; alert(num); }; } var f = fn(); f(); //1 f(); //2
因为函数一旦调用里面的内容就会被销毁,下一次调用又是一个新的函数
function fn(){ var num = 5; num+=1; alert(num); } fn(); //6 fn(); //6
我们首页定义了一个fn函数,里面有个num默认为0,接着返回了一个匿名函数(也就是没有名字的函数)。我们在外部用f接收这个返回的函数。这个匿名函数干的事情就是把num加1,还有我们用来调试的alert。
这里之所以执行玩这个函数num没有被销毁是因为那个匿名函数的问题,因为这个匿名函数用到了这个num,所以没有被销毁,一直保持在内存中,因此我们f()时num可以一直加
var name = "The Window"; var object = { name : "My Object", getNameFunc : function(){ return function(){ return this.name; }; } }; alert(object.getNameFunc()());
object.getNameFunc()
返回了一个匿名函数:
function(){
return this.name; };
this对象是在运行时基于函数的执行环境绑定的,
匿名函数的执行环境具有全局性,
因此匿名函数的this指向window
var name = "The Window"; var object = { name : "My Object", getNameFunc : function(){ var that = this; return function(){ return that.name; }; } }; alert(object.getNameFunc()());