javascript變量和函數提升

javascript變量和函數提升

當瀏覽器處理JavaScript代碼的時,包括變量和函數在內的所有聲明都會在任何代碼被執行前被處理了

變量提升

在javascript中,有一個神奇的現象,就是有時候變量聲明在後面,卻在前面就可以調用。代碼如下

console.log(a);
var a = 5;

變量a的聲明被提升到了當前作用域的頂端,即變量提升
但是因爲僅僅是變量聲明提升了,後面賦值語句並不會提升,conole.log打印a時候,此時a是未賦值的,所有爲undefined。
在這裏插入圖片描述

函數提升

在同一個<script…/>元素內,JavaScript允許先調用函數,然後在後面再定義函數,相當於提前聲明瞭該函數。代碼如下:

	<script>
        console.log(add(2,5));
        function add(a,b){
            sum=a+b;
            return sum;
        }
    </script>

在這裏插入圖片描述
可以看到,我們先調用的函數後聲明的函數,說明函數在運行前已經被提前到了最前面。
我們都知道,創建函數有聲明式和字面量。下面試試字面量,代碼如下:

	<script>
        console.log(add(2,5));
   		var add = function add(a,b){
            sum=a+b;
            return sum;
        }
    </script>

發現控制檯出現報錯
在這裏插入圖片描述
我們可以將add看作變量,它的聲明語句會被提升到頂端,但賦值語句(函數體)並不會提升。可以看出,只有函數聲明纔有提升。

總結:

我們現在已經知道變量和函數都會提升,那麼誰的優先級更高呢,測試一下。

		console.log(add(2,5));
         function add(a,b){
            sum=a+b;
            return sum;
        }
        var add = 0

在這裏插入圖片描述
運行後結果是函數結果,而不是undefined,說明雖然都提升了,可以看出,變量的局部提升優先於函數聲明的整體提升。

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