JavaScript块范围与功能

Ali*_*iba 4 javascript

以下片段完全相同吗?如果没有什么是尊重?

var x = (function() {
    ... //a
    return function(){
        ... //b
    };
})();
Run Code Online (Sandbox Code Playgroud)

var x;
{
    ... //a
    x = function(){
        ... //b
    };
}
Run Code Online (Sandbox Code Playgroud)

phi*_*hag 6

有一个主要区别:在JavaScript中,块不会引发新的变量范围.因此,您无法在// a代码块中定义私有变量.相比

var x = (function() {
    var v = 42;
    return function(){
        return v;
    };
})();
// v; would yield ReferenceError: v is not defined, so you need to call x
Run Code Online (Sandbox Code Playgroud)

var x;
{
    var v = 42;
    x = function(){
        return v;
    };
}
// v is 42 here, that's not what's intended.
Run Code Online (Sandbox Code Playgroud)