将函数对象作为参数传递给另一个函数

时间:2017-07-07 21:38:37

标签: javascript function

我正在尝试了解以下代码段的流程 -

var inner = function (a){
    console.log("a is -- ", 9);
}

var outer = function(b){
    console.log("Executing outer()");
    b();
}

outer(inner(5));

目前的输出是 -

a is --  9
Executing outer()
app.js:6 Uncaught TypeError: b is not a function 
at outer (app.js:6)
at app.js:9

我期待以下内容 -

Executing outer()
a is --  9

我理解在语句 outer(inner(9)) inner(9)是一个函数调用,它评估(运行内部包含的代码) )函数),但我希望outer()函数内的代码来评估inner()中的代码。基本上,我想将9作为变量传递给outer(),以便它可以将它传递给inner()

请指出任何可以帮助我更好地理解这个概念的在线资源。另外,如果已经回答,请将此问题标记为重复。谢谢!

3 个答案:

答案 0 :(得分:2)

outer内的调用不会将任何参数传递给回调函数b

b();

正如你所说,你需要传递一个函数b,当没有参数调用时,它会有效地调用inner(5)并返回它的值。

然而,强迫这样的b与表达式inner(5)的视觉相似性,后者的结果是另外的东西:它不是“当被称为......时的函数”,但是而是innerundefined的返回值。

您需要的是经典的Javascript closure

outer(function() { inner(5); }); // return omitted as value uninteresting

或使用Function.prototype.bind

outer(inner.bind(this, 5));

或使用更现代的ES6 arrow function

outer(() => inner(5))

答案 1 :(得分:0)

可以从inner返回一个函数,其余的都保持不变

var inner = function(a) {
  return function() {
    console.log("a is -- ", a);
  }
}

var outer = function(b) {
  console.log("Executing outer()");
  b();
}

outer(inner(5));

答案 2 :(得分:0)

你想要的东西会在这样的样本中起作用:

var inner = function(a) {
  return function() {
    console.log("a is -- ", a);
  }
}

var outer = function(b) {
  console.log("Executing outer()");
  b();
}

outer(inner(9));

虽然你可能想看看这样的Javascript Promises。

https://developers.google.com/web/fundamentals/getting-started/primers/promises

这样,您可以将函数链接在一起,以执行以下操作:

outer(9).then(inner())

你可以让函数外部返回一些东西,然后传递给内部。