作为Javascript的初学者,我试图调用一个函数,其参数是一个函数。但是我得到了这个错误。
function execute(f) {
f();
}
var m = function(x) { return x * x };
m(8) #=> returns 64
execute(m(8)) #=> Uncaught TypeError: number is not a function
我想函数execute
在行使其身体之前正在执行m(8)
,因此调用变为execute(64)
。如果是这样,我如何使用参数传递函数?
答案 0 :(得分:2)
您必须将它们作为单独的参数传递,并使用call
或apply
。
例如:
function execute(f, args) {
return f.apply(null, args);
}
var m = function(x) { return x * x };
m(8)
execute(m, [8])
现在,让我们假设您希望函数接受任意数量的参数,并且您不想打扰制作数组。然后它会更有趣:
function execute() {
return arguments[0].apply(null, [].slice.call(arguments, 1));
}
var m = function(x,y) { return x * y };
console.log(m(8, 4))
console.log(execute(m, 8, 4))
答案 1 :(得分:2)
您可以使用bind部分应用8到m:
function execute(f) {
f();
}
var m = function(x) { return x * x };
execute(m.bind(null, 8))