js中變數及函式的提升
阿新 • • 發佈:2021-01-28
技術標籤:jsjsjavascript前端
js中變數及函式的提升
思考:下列程式碼輸出什麼
結果: 控制檯輸出:1
為什麼???
這就涉及到js中變數和函式的提升了。
js在解析程式碼時,會將所有變數的宣告和函式提升到作用域的最前面。而函式的提升在所有變數宣告的後面。注意:js只將變數的宣告提升,它的值不會提升,還在原來的位置。
因此,上面圖片中的程式碼經js解析後:
function test() {
var a;
function a() {
}
a = 1;
console.log(a); //輸出1
}
test();
注意事項
1、js只提升變數的宣告,不提升變數的值
test();
test2();
function test() {
console.log("test");
}
var test2 = function () {
console.log("test2")
}
結果:
原因:
經js解析後:
var test2;
function test() {
console.log("test");
}
test ();
test2();
test2 = function () {
console.log("test2")
}
js只提升變數的宣告,不提升變數的值,因此在執行test2()時,只聲明瞭變數,還未給它賦值,因此test2此時還不是一個方法。
2、變數的提升是根據變數的作用域而提升的,因此區域性變數是在函式內提升。
test();
function test() {
console.log(a); //輸出undefined
var a =1;
}
console.log(a); //報錯
3、隱式全域性變數不會被提升
console.log(a);
a = "a";
結果:會報錯