while(condition){
var variable;
...
}
和
while(condition){(function(){
var variable;
...
})();}
有人可以解釋我百米運動員之間的區別?
while(condition){
var variable;
...
}
和
while(condition){(function(){
var variable;
...
})();}
有人可以解釋我百米運動員之間的區別?
在第一種情況下,變量可以在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
變量有function scope在JavaScript中。所以在第一個循環中,variable
在函數內部的任何位置都可見 - 包含while循環的函數,即。
在第二個中,variable
僅在匿名函數中可見,因爲這是它聲明的函數。
在第一種情況下,可以在包含while
的函數中的任何位置使用variable
。這是因爲JavaScript沒有局部範圍,只有函數範圍。
在某些情況下這可能是不可取的,因此第二個變體將變量(和循環的主體)包含在匿名函數中。
關閉考慮以及達林季米特洛夫評論。
自動調用函數基本上創建一個範圍。它內部定義的變量將不能在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
在第一種情況中,變量是包含同時()語句的函數內的任何地方可訪問的;它在這段時間結束時並沒有超出範圍。 –
@IanClelland,對,我已經意識到這一點,並解決了我的答案。 –
這其實並不完全正確。事實上,第一個例子中的變量甚至可以在while條件之外訪問。例如,Java具有您描述的本地範圍,但在JavaScript中,變量的範圍始終是功能範圍。 (有人可能希望看到與聲明作爲例外) – tec