我有一個局部範圍的問題。第二個console.log不顯示「a」值,但顯示未定義。爲什麼這樣?爲什麼本地作用域不引用全局變量?
"use strict"
console.log(a); //undefined
var a = "a";
function b(){
console.log(a); // why is undefined here?
var a = "a1";
console.log(a); // here is "a1"
}
b();
我有一個局部範圍的問題。第二個console.log不顯示「a」值,但顯示未定義。爲什麼這樣?爲什麼本地作用域不引用全局變量?
"use strict"
console.log(a); //undefined
var a = "a";
function b(){
console.log(a); // why is undefined here?
var a = "a1";
console.log(a); // here is "a1"
}
b();
面向對象的JavaScript,第2版:當你的JavaScript程序執行進入一個新的功能,所有的變量聲明 在函數的任何位置被移動(或升高,或懸掛)的 函數的頂部。記住這是一個重要的概念。 此外,只有聲明被提升,這意味着只有 變量的存在被移動到頂端。任何任務都保持在原來的位置。 在前面的例子中,局部變量a的聲明是 。
var a = 123;
function f() {
var a; // same as: var a = undefined;
alert(a); // undefined
a = 1;
alert(a); // 1
}
JS會處理你的代碼,如:
"use strict"
var a; // undefined
console.log(a); //undefined
a = "a";
function b(){
var a; // undefined
console.log(a); // all is clear, LOCAL variable a is undefined.
a = "a1";
console.log(a); // here is "a1"
}
b();
閱讀更多關於吊裝here。
此外,您還可以閱讀Function declaration hoisting,這也是JavaScript基礎知識的重要組成部分。
提升是JavaScript將默認行爲移至頂部的默認行爲。你的函數範圍內有一個a
變量。這是它的外觀,當你執行它,如:
"use strict"
console.log(a); //undefined
var a = "a";
function b(){
var a;
console.log(a); // Undefined because a is not set
a = "a1";
console.log(a); // here is "a1"
}
b();
因爲你在函數B定義的另一個變量,所以它是這樣的:
function b() {
var a;
console.log(a);
a = "a1";
console.log(a);
}
刪除第二個'var'到_assign_一個值到全局'var a'而不是_redeclare_它。 –
var a函數內部也是一個全球範圍..爲什麼你聲明兩個.. – nisar
如果你的兄弟和朋友都被命名爲「鮑勃」,你需要更具體的與兩個車程。 – dandavis