1. 程式人生 > >JS-預解析(提升)與程式碼執行過程

JS-預解析(提升)與程式碼執行過程

 

1,預解析的過程。

2,程式碼的執行過程。

 

預解析:程式在執行過程,會先將程式碼讀取到記憶體中檢查,會將所有的宣告在此處進行標記,所謂的標記就是讓js解析器知道這個名字,後面在使用這個名字的時候,不會出現未定義的錯誤,‘這個標記過程就是提升。

 

## 宣告:

             1,名字的宣告,識別符號的宣告(變數的宣告)

                     **  名字的宣告就是讓我們的解析器知道這個名字

                     **  名字並沒有任何資料與之對應

 

            2,函式的宣告

                     **  函式宣告包括兩部分

                     **  函式宣告與函式表示式的區別,函式宣告是單獨寫在一個結構裡面的,不存在任何語句,邏輯判斷結構中

 

 

### 又如下面的預解析執行過程

              function f() {};

              ** 首先告訴解析器有這個函式名字的存在,該階段與變數的名字宣告一致

              ** 然後告訴解析器這個名字連線的函式體

 

### 下面程式碼的解析執行過程

 

報錯:numb is not a function

報錯:

分析過程:

       1,預解析程式碼,提升名字

                     ***首先提升名字 numb 

                     ***再提升函式名,但是 numb 已經存在,使用跳過,讓名字與函式體對應

                     ***預解析後只有一個名字 numb

      2,開始執行程式碼,從第一句賦值語句開始

                     ***numb 賦值為1

                     ***覆蓋了函式體

       3,呼叫numb,由於numb是數字1,因此保錯

*****************************************************************************************************************

 執行結果:1,undefined

                   2,456

 程式碼解析與執行過程: