gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:12:04 26 4
gpt4 key购买 nike

我试图理解以下代码片段的流程 -

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) 是一个函数调用,它评估(运行包含在 inner( ) 函数),但我希望 outer() 函数内的代码评估 inner() 内的代码。基本上,我想将 9 作为变量传递给 outer(),以便它可以将其传递给 inner()

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

最佳答案

outer 中的调用是在不向回调 函数 b 传递任何参数的情况下进行的:

b();

因此,正如您所说,您需要作为 b 传入一个函数,该函数在不带参数调用时有效地调用 inner(5) 并返回其值.

无论这种 b 与表达式 inner(5) 的视觉相似性多么引人注目,后者的结果是另外一回事:它不是“一个函数,当被调用时...”,而是 inner 的返回值:undefined

你所需要的都可以作为经典实现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))

关于javascript - 将函数对象作为参数传递给另一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44980000/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com