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
返回的是值。