我正在尝试了解以下代码段的流程 -
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()
请指出任何可以帮助我更好地理解这个概念的在线资源。另外,如果已经回答,请将此问题标记为重复。谢谢!
答案 0 :(得分:2)
outer
内的调用不会将任何参数传递给回调函数b
:
b();
正如你所说,你需要传递一个函数b
,当没有参数调用时,它会有效地调用inner(5)
并返回它的值。
然而,强迫这样的b
与表达式inner(5)
的视觉相似性,后者的结果是另外的东西:它不是“当被称为......时的函数”,但是而是inner
:undefined
的返回值。
您需要的是经典的Javascript closure:
outer(function() { inner(5); }); // return omitted as value uninteresting
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())
你可以让函数外部返回一些东西,然后传递给内部。