Javascript Closure:函数返回“undefined”而不是值

时间:2017-10-26 06:10:07

标签: javascript closures

我正在尝试学习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的正确值。真的很感激,如果有人能解释这种行为。

1 个答案:

答案 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。