web前端-JavaScript 變量提升 -022

JavaScript 變量提升

JavaScript 中,函數及變量的聲明都將被提升到函數的最頂部。
JavaScript 中,變量可以在使用後聲明,也就是變量可以先使用再聲明。
以下兩個實例將獲得相同的結果:
實例 1:

x = 5; // 變量 x 設置爲 5

elem = document.getElementById("demo"); // 查找元素 
elem.innerHTML = x;                     // 在元素中顯示 x

var x; // 聲明 x

實例 2:

var x; // 聲明 x
x = 5; // 變量 x 設置爲 5

elem = document.getElementById("demo"); // 查找元素 
elem.innerHTML = x;                     // 在元素中顯示 x

要理解以上實例就需要理解 “hoisting(變量提升)”。
變量提升:函數聲明和變量聲明總是會被解釋器悄悄地被”提升”到方法體的最頂部。

JavaScript 初始化不會提升

JavaScript 只有聲明的變量會提升,初始化的不會。
以下兩個實例結果結果不相同:
實例 1

var x = 5; // 初始化 x
var y = 7; // 初始化 y

elem = document.getElementById("demo"); // 查找元素 
elem.innerHTML = x + " " + y;           // 顯示 x 和 y

實例 2

var x = 5; // 初始化 x

elem = document.getElementById("demo"); // 查找元素 
elem.innerHTML = x + " " + y;           // 顯示 x 和 y

var y = 7; // 初始化 y

實例 2 的 y 輸出了 undefined,這是因爲變量聲明 (var y) 提升了,但是初始化(y = 7) 並不會提升,所以 y 變量是一個未定義的變量。
實例 2 類似以下代碼:

var x = 5; // 初始化 x
var y;     // 聲明 y

elem = document.getElementById("demo"); // 查找元素
elem.innerHTML = x + " " + y;           // 顯示 x 和 y

y = 7;    // 設置 y 爲 7

在頭部聲明你的變量

對於大多數程序員來說並不知道 JavaScript 變量提升。
如果程序員不能很好的理解變量提升,他們寫的程序就容易出現一些問題。
爲了避免這些問題,通常我們在每個作用域開始前聲明這些變量,這也是正常的 JavaScript 解析步驟,易於我們理解。
JavaScript 嚴格模式(strict mode)不允許使用未聲明的變量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章