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 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"。
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- 深入理解PHP之匿名函数
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 最后一次说说闭包
- Ajax
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法
- Redux系列02:一个炒鸡简单的react+redux例子