鍍金池/ 問答/HTML/ 請問高程三中 7.2.1 - 閉包與變量 這小節(jié)中的兩個(gè)例子為什么無法跑出書中的

請問高程三中 7.2.1 - 閉包與變量 這小節(jié)中的兩個(gè)例子為什么無法跑出書中的結(jié)果?

這是例一,按照書中說的函數(shù)返回的值應(yīng)該是[10,10,10,10,10,10,10,10,10,10],可是返回的確是函數(shù)體本身
函數(shù)結(jié)果

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

例二也是,返回的不是下標(biāo)本身而是函數(shù)體

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

我將例一改成下面這樣到是可以返回?cái)?shù)字,但返回的是下標(biāo)而不是10。

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

請問是為什么?

回答
編輯回答
尋仙

你再讀讀,我第一次的時(shí)候也讀錯(cuò)了;

這個(gè)函數(shù)會(huì)返回一個(gè)函數(shù)數(shù)組。表面上看,似乎每個(gè)函數(shù)(函數(shù)數(shù)組里的每個(gè)函數(shù))都應(yīng)該返回自己的索引值,即位置0 的函數(shù)返回0,位置1 的函數(shù)返回1,以此類推。但實(shí)際上,每個(gè)函數(shù)(函數(shù)數(shù)組里的每個(gè)函數(shù))都返回10;
在重寫了前面的createFunctions()函數(shù)后,每個(gè)函數(shù)(函數(shù)數(shù)組里的每個(gè)函數(shù))就會(huì)返回各自不同的索引值了。
2017年10月11日 19:34
編輯回答
伴謊

例1返回的是數(shù)組,只是數(shù)組的成員是函數(shù)。你看兩邊還有中括號

第二個(gè)同理啦

clipboard.png

2018年1月15日 16:30