JavaScript块范围与功能

时间:2011-04-30 11:15:46

标签: javascript

以下代码段是否完全相同?如果没有什么是尊重?

var x = (function() {
    ... //a
    return function(){
        ... //b
    };
})();

VS

var x;
{
    ... //a
    x = function(){
        ... //b
    };
}

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:0)

一个主要区别是,在执行...//a时,x不存在。现在在你的情况下,在两种情况下它都是undefined,但一般来说在...//a期间可以访问x变量,而在第一种情况下它不是。{/ p>

否则在你的情况下它是完全相同的。在你的情况下,代码基本上被重构为一个单独的函数,就像在任何其他语言中一样。

相关问题