1. 程式人生 > >函式宣告和變數宣告存在優先順序嗎?

函式宣告和變數宣告存在優先順序嗎?

上幾張圖:

第一個:

聲明瞭變數a,當預解析時,它的值為undefined,再聲明瞭函式a,然後輸出一下,發現a  輸出為整個函式,

所以暫且認為函式宣告會高階一點,

聲明瞭a變數和a函式,彈出a的值為4,但是,呼叫時卻為not a function,當你輸出a的時候,他才賦值為4,覆蓋了函式a,是宣告順序不同嗎?變數宣告優先順序高於函式宣告?


再看這個,換了個順序,還是一樣的,說明如果a變數賦值了話就會覆蓋函式宣告。


看看看,你不賦值他就很正常,所以就是因為賦值了,所以覆蓋了函式a,


看看,一賦值就有問題,在此證明,賦的值會覆蓋a函式


把輸出放前面。預解析時,a是undefined,函式a為也儲存了整個函式,那麼為啥在前面輸出為function,後面輸出的a=7;


這個其實和前面的某一個一樣,沒什麼問題


看了這些,我們應該分析一下了,js直譯器進行解釋的時候,會先預解析,分析一下最後一個,

預解析:

a:undefined

不執行

不執行

a:function(){   return 9}

當代碼開始執行的時候:

a未賦值,還是undefined,

alert(a)  函式宣告優先順序高於變數宣告的優先順序。

alert(a());呼叫a函式,

可是為什麼賦值了的變數卻會覆蓋函式呢?

有個博主說:同一個識別符號的情況下,變數宣告與函式宣告都會提升;函式宣告會覆蓋變數宣告,但不會覆蓋變數賦值,即:如果宣告變數的同時初始化或賦值那麼變數優先順序高於函式。

嘻嘻嘻~所以這句話解決了所有問題。