2011-11-28 107 views
0

Wrox Profesionnal Javascript p188 我不明白这部分在第8行,其中匿名函数已经有一个参数num,但如何可以(i)被复制到参数num。通常情况下,一个函数会在右括号处停下来,加上(i)对我来说没有意义。Javascript匿名函数参数传递(wrox professionnal javascript p188)

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

回答

1

这是调用函数并将参数i传递给它的简称。这就像这样:

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

function myFunction(num){ 
    return function(){ 
     return num; 
    } 
} 

思想为匿名函数我的帮助您了解正在发生的事情,所以不是myFunction的(i)您有功能(NUM){...}(我);

+0

我想知道的是(i)函数表达式?如果没有,这种类型的打字有没有名字? – FireStream

1

这是一个闭包和一个自动执行功能。 i正在被“保存”在返回函数的范围内。

var test = "ONE"; 
var scoped = function() { 
    alert(test); 
} 
var saved_scoped = (function (value) { 
    return function() { 
     alert(value); 
    } 
})(test); 

test = "NOT ONE!"; 
scoped(); // alerts NOT ONE! 
saved_scoped(); // alerts ONE 

因此您立即执行(i)的功能。然后返回一个保存了i值的函数。