我有一个自定义函数,我们将其称为 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 )
。如何实现每次调用 e.exec
时都会评估 func
?
更新
如果有一个解决方案支持同时使用这两种方法,那就太好了:
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));
最佳答案
替换这个:
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);
您应该发送一个函数以便将来每次迭代调用。
您实际上所做的是立即调用它。
关于Javascript 函数参数评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26944624/