Javascript匿名函数参数传递(wrox专业javascript p188)

时间:2011-11-28 01:16:40

标签: javascript

Wrox Profesionnal Javascript p188 我不理解第8行的这一部分,其中匿名函数已经有一个num的参数,但是如何将(i)复制到参数num中。通常情况下,一个函数会在结束括号中停止},添加(i)对我来说没有意义。

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

2 个答案:

答案 0 :(得分: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值的函数。

答案 1 :(得分:1)

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

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视为匿名函数我帮助您了解正在发生的事情,因此我没有myFunction(i),而是函数(num){...}(i);