【发布时间】:2017-06-27 08:52:44
【问题描述】:
我一直在处理多段代码中的问题,但似乎可以归结为我在此演示中展示的内容。我认为这与闭包的取消引用有关:
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,它没有被修改,而不指定任何特定的回调?
【问题讨论】:
标签: javascript callback closures