JS基礎 (1) 變數提公升與凍結

2021-10-18 15:53:56 字數 1115 閱讀 5204

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...