您的位置:首页 > Web前端 > JavaScript

js---匿名函数和闭包

2016-04-17 18:22 232 查看
  匿名函数和闭包在js中是不一样的,匿名函数一般是没有名字的函数,而闭包是指有权访问另一个函数作用域中的变量的函数。

var counting=(function(){       var count=0;       function autoPlus(){               console.log(count++);           }       return autoPlus;       })();

        上述代码是一个典型的闭包,但是js中作用域链是这样的:内层函数中的变量没有声明,那么它就会沿着作用域链一级一级向上搜索变量名,直至全局变量window对象定义的变量,所以这里autoPlus函数能够访问外层函数的count变量并不是因为闭包。

        而闭包的特点在于它引用了外部函数的变量,则外部函数的变量就不会被销毁,直到闭包被销毁。一般匿名函数执行后,其内包含的变量和作用域链都是会被销毁的,但是如上述代码,count就没有被销毁。
        this 对象是在运行时基于函数的执行环境绑定的:在全局函数中, this 等于 window,而当函数被作为某个对象的方法调用时, this 等
于那个对象。不过,匿名函数的执行环境具有全局性,因此其 this 对象通常指向 window。(以下代码摘自《JavaScript高级程序设计》)

var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return function(){
return this.<
4000
/span>name;
};
}
};
alert(object.getNameFunc()()); //"The Window"(在非严格模式下)


var name = "The Window";
var object = {
name : "My Object",
getName: function(){
return this.name;
}
};
object.getName(); //"My Object"
(object.getName)(); //"My Object"
(object.getName = object.getName)(); //"The Window",在非严格模式下
//第三行代码先执行了一条赋值语句,然后再调用赋值后的结果。因为这个赋值表达式的值是
函数本身,所以 this 的值不能得到维持,结果就返回了"The Window"。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  闭包 JavaScript