首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

为何前者形成闭包 后者没有解决方案

2012-04-25 
为何前者形成闭包 后者没有var y globalfunction constructFunction() {var y localfunction A(

为何前者形成闭包 后者没有
var y = "global"; 
function constructFunction() { 
var y = "local"; 
function A(){
return y;
}
return A;

alert(constructFunction()()); // 结果为local

==================================================
var y = "global"; 
function constructFunction() { 
var y = "local"; 
return new Function("return y");  

alert(constructFunction()()); // 输出 "global" 

======================
为何前者形成了闭包,后者没有?


[解决办法]
JavaScript的解释器在每次开始执行一个函数时,都会为该函数创建一个执行环境, 运行不属于任何函数的JavaScript代码的环境使用的是全局对象。 这个环境一个重要的部分就是定义变量的对象。当一个函数被调用时,就会为他创建 一个调用对象并放置在作用域链中。当该函数退出的时候,调用对象会从作用域链中 移除,所以也就没有对他的引用,所以JavaScript的垃圾回收机制会把它所占的内存 释放掉。下一次调用该函数数时又重复以上步骤,所以普通函数的调用对象的值并不 会在内存中保存,每一次调用都重新定义。如下例子: 

JScript code
                function a(){  var o = 0;  return o;}e = a(); 

热点排行