之间有什么区别
while(condition){
var variable;
...
}
和
while(condition){(function(){
var variable;
...
})();}
有人能解释我的干涉吗?
答案 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
答案 4 :(得分:-2)
要考虑封闭以及Darin Dimitrov的评论。