下面這段代碼,就是變量提升最好的例子。
爲什麼說是最好呢?
首先,它有關變量提升,通俗來說就是顯示使用後定義。
再者,變量提升不僅有關於變量,函數也會被提升,它還涉及到變量和函數被提升的先後順序。
現在我會爲大家演示 x=5;var x; 和 var x=5;之間的區別
首先,我們要知道js中的變量提升。JavaScript 只有聲明的變量會提升,初始化的不會。
這是聲明,不管在你使用前還是後,它在解析時都會被放在window對象下。當檢測到你賦值或使用時,自然而然不會報錯。
var x;
而下面這個,叫做初始化,它不會被提升。
var x=5;
=====================分割線========================
其次,看下面這一段代碼
window.onload=function(){
var x = 5; // 初始化 x
// 聲明 y
y = 5;
elem = document.getElementById("demo"); // 查找元素
elem.innerHTML = x + " " + typeof y; // 顯示 x 和 y
// 設置 y 爲 7
var y;
function y(){
return 7;
};
}
他的輸出結果爲 5 number,也就是說,y在這裏是一個數值型變量。而在他之後聲明的函數被覆蓋了(js沒有重載這一說)
!!!!
常識,後聲明的函數應該覆蓋先聲明的變量。但是這裏卻不能用這一理論解決。
我們知道,聲明的函數也會被提升,他的優先級高於變量,所以它又被變量覆蓋。
小提示:賦值函數不會被提升哦,就算先複製在來一個 var 他也不會被提升。