var x = 1;
(function() {
console.log(x);
var x = 2;
}());
代碼爲什麼說CONSOLE.LOG(X)時,x是未定義的?
var x = 1;
(function() {
console.log(x);
var x = 2;
}());
代碼爲什麼說CONSOLE.LOG(X)時,x是未定義的?
變量提升。實際的代碼是這樣執行的。
var x = 1;
(function() {
var x; // x = undefined
console.log(x);
x = 2;
})();
編輯:關於李斯特先生的建議,有點關於變量提升。來自MDN(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var):
「變量聲明,無論它們出現在哪裏,都會在任何代碼執行之前被處理。var聲明的變量的作用域是當前的執行上下文,它可能是包含函數或變量在任何職能之外宣佈,全球。「
你可以向OP解釋什麼變量提升是什麼,爲什麼'var x = 1;函數whatever(){console.log(x);}'工作嗎? –
我知道他們可以在其他地方查看它,但如果這裏的答案是獨立的,那麼它會很好。 –
@ TBWill4321這個代碼當我做它。它給未定義! –
由於編譯器的原因,即使您在代碼下面啓動了一個var,編譯器也會將它發送到頂端,就像var x;
,因此它在運行console.log之前首先啓動爲未定義的「x」,這就是爲什麼這是一種很好的練習,可以啓動你將要在函數中使用的所有變量,所以這些錯誤不會發生。
@WolfOfWallstreet所以你想在你console.log(x);獲得2號的權利? –