Javascript函数参数评估

时间:2014-11-15 09:58:09

标签: javascript function

我有自定义功能,我们称之为func

function func(someArg) {
    return Math.random() + someArg;
}

我有一组Thing个对象,这些对象都有某种功能exec

var Thing = function() {
    this.exec = function(n) {
        console.log(n);   
    }
}

var arr = [new Thing(), new Thing(), new Thing()];

现在,我希望能够为数组中的所有元素执行一个函数,并且应该为每个函数执行评估该函数的参数。一个例子:

function execAll(arg) {
    arr.forEach(function(e) { e.exec(arg); });
}

execAll(func(10));

这会返回相同值的3倍,因为对func()的调用评估execAll一次,然后在每个e.exec(arg)中使用func。我怎样才能实现e.exec的每次调用都会评估execAll(someFunc()); // invoked with a function execAll(20); // invoked with a plain value

更新

如果有一个支持同时使用的解决方案,那将是非常好的:

var Thing = function() {
    this.exec = function(n) {
        console.log(n);   
    }
}

var arr = [new Thing(), new Thing(), new Thing()];

var func = function(someArg) {
    return Math.random() + someArg;
}

function execAll(arg) {
    arr.forEach(function(e) { e.exec(arg); });
}

execAll(func(10));

整个片段:

{{1}}

2 个答案:

答案 0 :(得分:1)

替换它:

function execAll(arg) {
    arr.forEach(function(e) { e.exec(arg); });
}

execAll(function (){func(10)});

用这个:

    function execAll(arg) {
      arr.forEach(function(e) { e.exec(typeof arg==='function'?arg():arg); });
    }

  execAll( 10);

您应该发送一个函数,以便将来为每次迭代调用。

你实际做的是立即调用它。

答案 1 :(得分:0)

我会使函数func成为Thing的私有函数。这提供了封装..

var Thing = function() {
    var func = function(someArg) {
        return Math.random() + someArg;
    };
    this.exec = function(n) {
        console.log(func(n));   
    };
}

var arr = [new Thing(), new Thing(), new Thing()];

function execAll(arg) {
    arr.forEach(function(e) { e.exec(arg); });
}

execAll(10);