我正在尝试学习JavaScript闭包并被输出搞糊涂了。我相信这应该简单快捷地回答。 当我运行以下代码片段时,我将“未定义”作为输出。
function foo(){
var x = 5;
function bar(){
return x; // returning value of x
}
baz(bar); // output is "undefined"
}
function baz(fn){
fn();
}
但是,如果我运行以下代码,则在控制台上打印正确的x值。
function foo(){
var x = 5;
function bar(){
console.log(x); // printing value of x on console
}
baz(bar); // output is 5
}
function baz(fn){
fn();
}
所以我很困惑为什么当x的值被返回时输出是“未定义的”,但是当在控制台上打印x的值时,则打印x的正确值。真的很感激,如果有人能解释这种行为。
答案 0 :(得分:0)
将您的代码修改为: -
function foo(){
var x = 5;
function bar(){
return x; // returning value of x
}
return baz(bar); // returns 5
}
function baz(fn){
return fn();
}
console.log(foo())
你没有在“baz”函数中返回“bar”函数返回的值,而且“foo”函数也应该返回baz函数返回的值。你可以在变量或控制台中保存它返回的值FOO。