请问高程三中 7.2.1 - 闭包与变量 这小节中的两个例子为什么无法跑出书中的结果?

这是例一,按照书中说的函数返回的值应该是[10,10,10,10,10,10,10,10,10,10],可是返回的确是函数体本身
函数结果

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

例二也是,返回的不是下标本身而是函数体

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

我将例一改成下面这样到是可以返回数字,但返回的是下标而不是10。

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

请问是为什么?

阅读 1.4k
2 个回答

你再读读,我第一次的时候也读错了;

这个函数会返回一个函数数组。表面上看,似乎每个函数(函数数组里的每个函数)都应该返回自己的索引值,即位置0 的函数返回0,位置1 的函数返回1,以此类推。但实际上,每个函数(函数数组里的每个函数)都返回10;
在重写了前面的createFunctions()函数后,每个函数(函数数组里的每个函数)就会返回各自不同的索引值了。

例1返回的是数组,只是数组的成员是函数。你看两边还有中括号

第二个同理啦

clipboard.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题