Javascript 此回调是否引用取消引用的闭包?
我一直在处理多段代码中的问题,但它似乎可以归结为我在这个演示中展示的内容。我认为这与政府取消对闭包的引用有关:Javascript 此回调是否引用取消引用的闭包?,javascript,callback,closures,Javascript,Callback,Closures,我一直在处理多段代码中的问题,但它似乎可以归结为我在这个演示中展示的内容。我认为这与政府取消对闭包的引用有关: 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 在第一个结果中,第一个函数按预期运行,将其隐藏变
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\u self
函数的“偷偷摸摸”吗?我怎样才能解决这个问题?作为奖励,是否有一种方法可以完全消除get_self
函数,并能够直接读取变量result
,该变量未经修改,无需指定任何特定回调?get_5
没有返回语句。传递给get_5
的内容并不重要,它将始终返回undefined
Perl将返回对sub中最后一条语句求值的结果,但JavaScript不会
如果希望get_5
返回调用传递给它的回调的结果,那么必须明确地说:
function get_5(callback) {
var result = 5;
return callback(result);
}
get_5
没有return
语句。传递给get_5
的内容并不重要,它将始终返回undefined
Perl将返回对sub中最后一条语句求值的结果,但JavaScript不会
如果希望get_5
返回调用传递给它的回调的结果,那么必须明确地说:
function get_5(callback) {
var result = 5;
return callback(result);
}
很好,谢谢你的快速回复。但是为什么我的示例中的第一个结果返回的是不同情况下的值,从而使它“工作”get\u self
确实返回了一个值。非常好,感谢您的快速响应。但是,为什么我的示例中的第一个结果返回的是不同情况下的值,从而使其“工作”get\u self
返回的是值。