JS——變量提升與函數提升

今天我們來學習一下JS特殊的變量提升屬性與函數提升屬性

變量提升

先舉一個例子吧,我在定義變量a之前調用它,控制檯沒有報錯,但是彈框顯示undefined。

<script type="text/javascript">
	alert(a);
	var a=1;
</script>

 以上情況出現的原因是JS的變量提升機制,將變量定義提升到了所在塊最開始的地方,相當於下面代碼

<script type="text/javascript">
    var a;
    alert(a);
    a=1;
</script>

因此彈框的時候不會報錯,但是a沒有值

 

函數提升

函數提升基本類似,將函數的定義提升到JS塊的最開始部位

<script type="text/javascript">
	a();
	function a(argument) {
		alert(1);
	}
</script>

相當於

<script type="text/javascript">
	function a(argument) {
		alert(1);
	}
	a();
</script>

所以基於函數提升的情況下,以下這種寫法就會出現error

<script type="text/javascript">
	a();
	var a=function () {
		// body...
		alert(1);
	}
</script>

顯示a不是一個函數。

總結

雖然JS有變量提升機制,不過寫代碼的時候還是儘量規範編寫,避免定義隱式函數可能出現的錯誤

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