如何使用函数作为参数调用函数?

时间:2014-11-20 09:18:09

标签: javascript

作为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)。如果是这样,我如何使用参数传递函数?

2 个答案:

答案 0 :(得分:2)

您必须将它们作为单独的参数传递,并使用callapply

例如:

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))