Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用函数作为参数调用函数?_Javascript - Fatal编程技术网

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

Javascript 如何使用函数作为参数调用函数?,javascript,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 我

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

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

例如:

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

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

例如:

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))
您可以使用将8部分应用于m:

function execute(f) {
  f();
}

var m = function(x) { return x * x };

execute(m.bind(null, 8))  
您可以使用将8部分应用于m:

function execute(f) {
  f();
}

var m = function(x) { return x * x };

execute(m.bind(null, 8))