Js闭包中变量理解
2016-12-24 03:40
169 查看
先看一个例子
执行上面代码:
预想结果:是每个函数输出的结果一次是0-6;
实际结果:console.log()全是7;
这是因为在执行闭包函数的时候,每个闭包函数的作用域链中都保存着他的包含函数的活动对象,也就是for循环已经结束时的i值,结束的时候i = 7;
通过让闭包函数立即执行可以达到每个函数输出预想的结果。
function fuc1() { var result = new Array(); for(var i = 0; i < 7; i++) { result[i] = function() { return i; }; } return result; }
执行上面代码:
for (var i = 0; i < 7; i++) { console.log(fuc1()[i]()); fuc1()[i]() = null; }
预想结果:是每个函数输出的结果一次是0-6;
实际结果:console.log()全是7;
这是因为在执行闭包函数的时候,每个闭包函数的作用域链中都保存着他的包含函数的活动对象,也就是for循环已经结束时的i值,结束的时候i = 7;
通过让闭包函数立即执行可以达到每个函数输出预想的结果。
function funRightnow() { var result = new Array(); for (var i = 0; i < 7; i++) { result[i] = function() { return i; }(); } return result; } for (var i = 0; i < 7; i++) { console.log(funRightnow()[i]); funRightnow()[i] = null; }
*最后对于闭包的执行环境:包含3个部分,闭包的活动变量,包含函数的活动变量,全局变量;
闭包的包含函数在执行完毕以后,闭包的包含函数的执行环境的作用域链会被销毁,但是执行环境中的变量,依然在内存当中;
被销毁的是执行环境的作用域链,而作用域链是指向变量的引用;*
相关文章推荐
- 对于JS语言的深刻理解(变量定义;作用域链;闭包;this)
- js的变量和闭包的理解
- js特殊例子--方法内重新定义了变量在后面就会前面的为undifined,后面没有定义就用全局的--各种专业文献上的“闭包”(closure)定义非常抽象,很难看懂。我的理解是,闭包就是能够读取其他函
- 谈谈自己对js闭包,执行上下文,作用域链,活动对象AO,变量对象VO的理解
- js中的闭包之我理解
- Js闭包理解
- 深入理解js闭包
- js中的闭包理解(closure)
- 简单说说我理解的js中的闭包
- JS闭包中未使用的引用变量回收机制浅探
- 理解Javascript_15_作用域分配与变量访问规则,再送个闭包
- JS 学习笔记--理解闭包
- javascript深入理解js闭包
- javascript技巧-javascript深入理解js闭包
- javascript深入理解js闭包
- js面向对象--理解闭包
- javascript深入理解js闭包
- 关于JS闭包的理解
- javascript深入理解js闭包