我一直在处理多段代码中的问题,但它似乎归结为我在这个演示中展示的内容。我认为这与解除对闭包的解除相关:
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
,而不指定任何特定的回调?
答案 0 :(得分:4)
get_5
没有return
声明。传递给get_5
的内容并不重要,总是返回undefined
。
Perl将返回评估sub中最后一个语句的结果,但JavaScript不会。
如果您希望get_5
返回调用回传的结果,那么您必须明确说明:
function get_5(callback) {
var result = 5;
return callback(result);
}