关于JS闭包的问题

在《JavaScript高级程序设计(第3版)》(Nicholas C.Zakas 著) 的“7.2闭包”一节中,作者为了说明“闭包所保存的是整个变量对象,而不是某个特殊的变量”,举了一个例子,代码如下:

function createFunctions(){
    var result = new Array();
    
    for (var i=0;i<10;i++){
        result[i] = function(){
            return i;
        };
    }
    
    return result;
}

作者说,这个函数设计的目的是返回一个数组{0,1,2,3,4,5,6,7,8,9},但是实际上会返回{10,10,10,10,10,10,10,10,10,10}。

那么问题来了,为什么我去调试,返回的是:

{ function(){return i;} , function(){return i;} , function(){return i;} , function(){return i;} , function(){return i;} , function(){return i;} , function(){return i;} , function(){return i;} , function(){return i;} , function(){return i;} }

WTF!!!!!!!

P.S.  我用的是alert和document.write命令,代码如下:

  function test(){
    var result = new Array();
    
    for (var i=0;i<10;i++){
        result[i] = function(){
            return i;
        };
    }
  	alert(result);
  	//document.write(result); 试了也不行,也没解析内嵌的匿名函数。
  }
NodeOS
浏览 1476回答 1
1回答

慕郎_莲华

没错的~~~result的值 都是一个函数~return 10;var a = createFunctions(); // 得到返回的result for(var i = 0; i < a.length; i++){ console.log(a[i]())//每个值都是函数function(){return 10;},执行就输出10 }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript