首页 > 编程语言 > 详细

JavaScript 作用域和闭包

时间:2014-03-28 20:07:24      阅读:458      评论:0      收藏:0      [点我收藏+]
看下面的例子:

var i, list = [];
for (i = 0; i < 2; i += 1) {
list.push(function(){
console.log(i);
});
}
list.forEach(function(func){
func();
});

我们将得到两次 "2" ,而不是预期的 "1" 和 "2" ,这是因为在 list 中的两个函数访问的变量 i都是其上一层作用域的同一个变量。

我们改动下代码,以利用闭包来解决这个问题:

var i, list = [];
for (i = 0; i < 2; i += 1) {
list.push((function(j){
return function(){
console.log(j);
};
})(i));
}
list.forEach(function(func){
func();
});

外层的“立即执行函数”接收了一个参数变量 i ,在其函数内以参数 j的形式存在,它与被返回的内层函数中的名称 j 指向同一个引用。外层函数执行并退出后,参数 j (此时它的值为 i 的当前值)成为了其内层函数的状态的一部分被保存了下来

JavaScript 作用域和闭包,布布扣,bubuko.com

JavaScript 作用域和闭包

原文:http://www.cnblogs.com/glenblogs/p/3629841.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!