这个while循环有什么区别?

时间:2011-11-25 16:35:28

标签: javascript

之间有什么区别
while(condition){
    var variable;   
    ...
}

while(condition){(function(){
    var variable;   
    ...
})();}

有人能解释我的干涉吗?

5 个答案:

答案 0 :(得分:7)

在第一种情况下,变量可以在while内的任何地方访问(甚至在while(condition) { var variable; ... // the variable is accessible here } // the variable is accessible here 之后)。在第二种情况下,它是私有的,只能在自动调用匿名函数中访问。所以差异基本上在变量的范围内。第二个例子似乎相当复杂,没有提供更多的背景。

第一个例子:

while(condition) {
    (function() {
        var variable;   
        ... // the variable is accessible here
    })();

    // the variable is NOT accessible here
}

// the variable is NOT accessible here

第二个例子:

{{1}}

答案 1 :(得分:2)

变量在JavaScript中有function scope。所以在第一个循环中variable在函数内的任何地方都可见 - 包含while循环的函数,即。

在第二个中,variable仅在匿名函数内部可见,因为它是声明它的函数。

答案 2 :(得分:2)

在第一种情况下,variable可以在包含while的函数中的任何位置访问。那是因为JavaScript没有本地范围,只有函数范围。

在某些情况下这可能是不合需要的,因此第二个变量将变量(和循环体)包含在匿名函数中。

答案 3 :(得分:1)

自动调用功能基本上创建了一个范围。其中定义的变量将无法在while循环外访问。

var i = 0;
while (i++ == 0) {
    var a = "hi  a";
}
console.log(a); //hi  a

var ii = 0;
while (ii++ == 0) {
    (function() {
        var b = "hi b";
    })();
}
console.log(b); //Uncaught ReferenceError: b is not defined

http://jsfiddle.net/

答案 4 :(得分:-2)

要考虑封闭以及Darin Dimitrov的评论。