Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 什么';while循环的区别是什么?_Javascript - Fatal编程技术网

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