JavaScript變量提升演示樣例
阿新 • • 發佈:2017-05-22
代碼 efi reference cti 全局變量 推斷 sum java fin
大家能夠先看一下這兩段代碼的異同,並推斷一下運行後分別得到的結果。
再運行這段代碼。此時得到的是6,a、b的值在全局作用域中找到了。
直接先看兩段代碼
function getSum() { var sum = a + b; var a = 1; var b = 2; return sum; } getSum();
function getSum() { var sum = a + b; a = 1; b = 2; return sum; } getSum();
大家能夠先看一下這兩段代碼的異同,並推斷一下運行後分別得到的結果。
在運行第一段代碼時,得到的NaN,這是由於在函數中變量聲明被提升的結果。在運行“sum = a + b”前,先進行了a,b的定義。但由於沒有賦值(賦值不會被提升)。所以此時a。b的值均為undefined。終於變為sum = undefined + undefined,然後得到NaN的結果。
在運行第二段代碼時。得到的卻是“ReferenceError: a is not defined",拋出一個異常說a沒有定義。在這裏。函數中的a,b因為沒有通過var定義,而被當成了全局變量,因此在函數中沒有對a,b的聲明進行提升。而在函數的一開始便運行了”sum = a + b"的操作,在運行這一句時,會沿著作用域量逐級往外找a與b的定義和值,因為在這裏沒有找到對應的定義(全局作用域也沒有),從而拋出a沒有定義異常(事實上b也會拋出沒有定義異常)。
將第二段代碼稍作改動,改成以下這樣:
a = b = 3; function getSum() { var sum = a + b; a = 1; b = 2; return sum; } getSum();
再運行這段代碼。此時得到的是6,a、b的值在全局作用域中找到了。
JavaScript變量提升演示樣例