运行存储在数组中的函数

时间:2014-02-23 17:46:05

标签: javascript arrays

我正在将一些函数推入一个数组但是我不知道如何在循环数组时运行这些函数。

我正在尝试将red yellow green输出到控制台。

以下是我的JavaScript的小提琴:http://jsfiddle.net/rYNv4/

这是我到目前为止的代码:

var myArr = [];

myArr.push( logItRunner('red')  );
myArr.push( logItRunner('yellow') );
myArr.push( logItRunner('green')  );
console.log(myArr);

//Function to be stored in array.  Should return the logIt function.
function logItRunner( arg ) {
    return function() {
        logIt( arg );
    };
}

//Function to log a string to the console
function logIt (color) {
    console.log(color);  
};

//Function to loop through array and fire functions within the array
function runIt () {
    for (var i = 0, len = myArr.length; i < len; i++) {
        //Fire Function within Array at position i and log the argument to the console.
        myArr[i];
    };
};

runIt();

3 个答案:

答案 0 :(得分:3)

myArr[i]是一个函数引用。你可以调用它所引用的函数,就像你在()使用函数引用时所做的那样:

在你的循环中,改变:

myArr[i];

myArr[i]();

答案 1 :(得分:1)

了解我如何执行下面的 myArri;

你差不多了,你忘记了()。

//Function to loop through array and fire functions within the array
function runIt () {
    for (var i = 0, len = myArr.length; i < len; i++) {
        //Fire Function within Array at position i and log the argument to the console.
        myArr[i]();
    };
};

答案 2 :(得分:0)

关于JavaScript闭包的工作原理,这通常是我们教授JavaScript闭包的方式,所以你的样本很好,因为它澄清了这个概念。

这就是我通常做同样的事情来教授JavaScript闭包的方式,这与你的完全类似,但有一点点差异:

var myArr = [];
myArr.push('red');
myArr.push('yellow');
myArr.push('green');

var funcArr=[];
function pushIt () {
    for (var i = 0, len = myArr.length; i < len; i++) {
        var func = (function(color){
            return (function(){
                console.log(color);
            });
        })(myArr[i]);
        funcArr.push(func);
    };
};
function runIt () {
    for (var i = 0, len = funcArr.length; i < len; i++) {
        funcArr[i]();
    };
};
pushIt();
runIt();