我一直在处理多段代码中的问题,但它似乎归结为我在这个演示中展示的内容。我认为这与闭包的取消引用有关:
function get_5(callback) {
var result = 5;
callback(result);
}
function get_self(x) {
return x;
}
get_5(console.log);
// 5
console.log(get_self(5));
// 5
在第一个结果中,第一个函数按预期运行,将其隐藏变量发送到 console.log
函数的输入中。
第二个结果也有意义,因为它实际上只是证明了第二个函数的工作原理:它接受输入的内容并返回它。
但是当我尝试组合这两个函数时,事情变得很奇怪:
var a = get_5(get_self);
console.log(a);
// Undefined!
这第三个结果是未定义的,很奇怪,我不知道为什么。闭包是否被取消引用,可能是由于 get_self
函数的“鬼鬼祟祟”?我怎样才能解决这个问题?作为奖励,是否有一种方法可以完全消除 get_self
函数,并能够直接读取未修改的变量 result
,而不指定任何特定的回调?
最佳答案
get_5
没有 return
语句。无论您传递给 get_5
的内容是什么,它总是返回 undefined
。
Perl 将返回子程序中最后一条语句的计算结果,但 JavaScript 不会。
如果您希望 get_5
返回调用您传递给它的回调的结果,那么您必须明确说明:
function get_5(callback) {
var result = 5;
return callback(result);
}
关于javascript - 此回调引用了取消引用的闭包吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44776004/