Javascript 什么';while循环的区别是什么?
两者的区别是什么Javascript 什么';while循环的区别是什么?,javascript,Javascript,两者的区别是什么 while(condition){ var variable; ... } 及 有人能给我解释一下差异吗?在第一种情况下,变量可以在中的任何位置访问,而(甚至在它之后)。在第二种情况下,它是私有的,只能在自动调用匿名函数内部访问。所以差异基本上是在变量的范围内。第二个例子似乎很复杂,没有提供更多的上下文 第一个例子: while(condition) { var variable; ... // the variable is ac
while(condition){
var variable;
...
}
及
有人能给我解释一下差异吗?在第一种情况下,变量可以在
中的任何位置访问,而(甚至在它之后)。在第二种情况下,它是私有的,只能在自动调用匿名函数内部访问。所以差异基本上是在变量的范围内。第二个例子似乎很复杂,没有提供更多的上下文
第一个例子:
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
变量在JavaScript中具有相同的属性。因此,在第一个循环中,变量
在函数中的任何位置都可见,即包含while循环的函数
在第二个函数中,变量
仅在匿名函数中可见,因为它是在匿名函数中声明的 在第一种情况下,变量
可在包含while
的函数中的任何位置访问。这是因为JavaScript没有本地作用域,只有函数作用域
这在某些情况下可能是不可取的,因此第二个变体包含了匿名函数中的变量(和循环的主体)。
得到了要考虑的闭包以及Darin Dimitrov注释。
< P>自动调用函数基本上创建了一个作用域。在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
在第一种情况下,变量可以在包含while()语句的函数中的任何位置访问;在这段时间结束时,它并没有超出范围。@Iancelland,没错,我已经意识到了这一点并修正了我的答案。这实际上并不完全正确。事实上,在第一个示例中,甚至可以在while条件之外访问变量。例如,Java具有您描述的那种局部作用域,但在JavaScript中,变量的作用域始终是函数范围。(有人可能想把with语句视为一个例外)让我害怕的是,在任何人抱怨之前,它就得到了+5。对不起,我重复了我的评论,我只是太晚了。
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