1.變數提公升
使用var定義的**,會把宣告放到前面去,賦值保留在原位
var name = "dun";
function show()
console.log(name); // undefined
}console.log(name) // dun
show();
為什麼出現這樣的情況,是因為js**在執行之前會通過解析器解析一遍。在解析的過程中就會產生變數提公升,將宣告的**放到最前面(自身作用域內)。
解析後的**如下:
var name;
name = "dun"
function show()
console.log(name);
}console.log(name)
show();
當我們注釋掉if語句時,就會發現列印結果不同了
var name = "dun";
function show()
console.log(name); // dun
}console.log(name) // dun
show();
變數提公升不是乙個好的現象,所以為了**的健壯性和穩定性,建議:
1.變數先宣告再複製;
2.建議使用let/const,少使用var
2.變數凍結
object.freeze可以凍結變數,凍結變數後,變數不可以修改了,但是不會報錯,使用嚴格模式會報出錯誤。
"use strict"
const data = ;
object.freeze(data);
data.port = '443'; // cannot assign to read only property 'port' of object '#'
console.log(data); // data的值未被修改
在函式中,使用var和不使用var宣告變數是不一樣的,前者是區域性變數,後者是全域性變數
在全域性中宣告變數,使用var和不使用var宣告變數也有區別,前者是宣告了乙個作用域為全域性的變數。後者是在window中新增屬性。
JS基礎 變數提公升
在js中,通過var宣告的變數,無論在何處申明,都會被視為宣告於所在函式的頂部 如果不在函式內,則視為全域性作用域頂部 申明會提公升,初始化不會提公升。例如 當我們單獨執行console.log a 時,會產生異常,因為a沒有定義。但是在後面加上var a 123,執行結果輸出undefined j...
JS基礎 變數提公升
在js中,通過var宣告的變數,無論在何處申明,都會被視為宣告於所在函式的頂部 如果不在函式內,則視為全域性作用域頂部 申明會提公升,初始化不會提公升。例如 當我們單獨執行console.log a 時,會產生異常,因為a沒有定義。但是在後面加上var a 123,執行結果輸出undefined j...
JS基礎 變數提公升
在js中,通過var宣告的變數,無論在何處申明,都會被視為宣告於所在函式的頂部 如果不在函式內,則視為全域性作用域頂部 申明會提公升,初始化不會提公升。例如 當我們單獨執行console.log a 時,會產生異常,因為a沒有定義。但是在後面加上var a 123,執行結果輸出undefined j...