重溫JS預編譯的四個步驟
JS是解釋型語言,執行過程分三步:
一、語法分析(檢查程式碼是否存在語法錯誤);
二、預編譯(程式碼執行之前,在記憶體中開闢空間,存放變數與函式);
三、解釋執行(執行JS程式碼);
理解預編譯的過程,對於理解作用域鏈、閉包、this指向、原型鏈至關重要,它們是相輔相成的。
預編譯分為四步:
1、建立AO物件
就是隱式的建立一個AO(Activation Object)空物件。
2、查詢形參和變數宣告,將形參名和變數名作為AO物件的屬性,值為undefined
注意此處是變數宣告(必須帶var),只是查詢形參名和變數宣告名不賦值。
3、將形參與實參統計
即修改AO物件中屬性名為形參的值為傳入的實參,如果沒有形參此步略過。
4、查詢函式宣告,函式名作為AO物件的屬性,函式體作為的值
此處是函式宣告,而非匿名函式和函式表示式。
總結:預編譯過程就是查詢變數宣告、形參和函式宣告的過程,並不初始化賦值,在解釋執行階段才會進行初始化 。
相關推薦
重溫JS預編譯的四個步驟
JS是解釋型語言,執行過程分三步: 一、語法分析(檢查程式碼是否存在語法錯誤); 二、預編譯(程式碼執行之前,在記憶體中開闢空間,存放變數與函式); 三、解釋執行(執行JS程式碼); 理解預編譯的過程,對於理解作用域鏈、閉包、this指向、原型鏈至關重要,它們是相輔相成的。
關於gcc編譯流程四個步驟的具體分析,預處理、編譯、彙編、連結
1.gcc編譯需要下面四個步驟,分別是 第一行,可執行檔案 (-o 是指可目標檔案) c語言原始檔 經過預處理的c原始檔程式碼 編譯後的目標檔案
GCC編譯C源代碼的四個步驟
二進制文件 存在 鏈接 四個步驟 pre 參數 -o 包含 利用 GCC編譯C源代碼有四個步驟:預處理---->編譯---->匯編---->鏈接。 可以利用GCC的參數來控制執行的過程,這樣就可以更深入的了解編譯C程序的過程。 下面將通過對一個程序的編譯來
typeof、搖樹優化、js預編譯
顯示 obj 表達 string defined 原始的 刪除 執行 undefined typeof: typeof用以獲取一個變量或者表達式的類型,一元運算符 null:空、無。表示不存在,當為對象的屬性賦值為null,表示刪除該屬性 undefined
js預編譯
函數表 兩個 oba 引用 con 實參形參 表達 var 函數形參 我們都知道js執行遵循兩個規則 1.函數聲明整體提升 2.變量 聲明提升 其實還有一點最重要的就是預編譯,預編譯往往發生在函數執行前,了解預編譯,對我們理解函數執行非常關鍵。 預編譯的前奏 1.
js預編譯規則
func test pan var 統一 變量 gpo color undefine 1.創建一個AO對象 2.找形參、變量聲明,把形參、變量聲明的名作為AO對象的屬性名,值為undefined 3.實參形參相統一,即把與形參相對應的實參的值賦給AO對象中相應的屬性 4.找
js預編譯原理
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>js預編譯原理</title> </head> <body> <scrip
js---預編譯
js作為解釋型語言執行的時候分為三步 1.通篇掃描,有沒有基礎語法錯誤。 2.預編譯,發生在函式執行前一刻。 3.解釋執行。 預編譯的步驟: 1.建立AO(活動物件,即作用域,執行期上下文,任何函式每次執行都會產生屬於當前執行的自己的獨一無二的AO,同一個函式執行時會產生不同的AO,a()
Scrapy 爬蟲 --四個步驟--
課程設計要用到爬蟲,稍微回顧下,Scrapy的爬蟲四步走....只是簡單的Scrapy,什麼分散式爬蟲啥的,感覺以後再說了....不談了... 1、建立專案 cmd >> scrapy startproject douban##
經理人解決問題四個步驟
該篇文章是講解如何按照步驟解決職場中碰到的問題的。 首先是發現異常(問題說白了就是期望和現實之間存在的差異),然後選出關鍵異常(我的理解就是找到關鍵問題所在),這樣就完成了界定問題的工作。第二部就是進行要因分析了,第三部分是進行確認方案,最後就是進行落地執行。 三確認方案
關於js預編譯、宣告提前的有趣現象
關於js,大家都知道js是一門單執行緒的解釋性語言,解釋性語言就是指一句一句執行的語言。 js在執行前會先預編譯下,簡單點說就是掃描js程式碼,對要宣告變數的宣告,提前的提前! 接下來就講一下預編譯的
從無到有:學習程式開發的四個步驟
從無到有:學習程式開發的四個步驟 常會有人覺得,這些網際網路程式設計師是不是腦袋的構造跟別人有什麼不同? 其實在程式設計師客棧做專案經理這麼長時間接觸各式各樣的程式設計師過程中,常有機會見證一個個程式設計師從無到有學會程式設計的過程。不可否認,的確有不少程式設計師是“生而知之者”,彷彿上
js預編譯和函數執行
scrip 詞法 創建 java rip function object 變量賦值 一次 javascript 執行過程 1.語法檢測(有沒有基本的語法錯誤,例如中文,關鍵字錯誤...)2.詞法分析(預編譯) (1)創建全局GO(global object)對象
ajax請求的四個步驟
1.什麼是ajax: 非同步javascript和XML。 同步是指:傳送方發出資料後,等接收方發回響應以後才發下一個數據包的通訊方式。 非同步是指:傳送方發出資料後,不等接收方發回響應,接著傳送下個數據包的通訊方式。 無重新整理讀取資料。無需載入整個頁面的情況下,重新整
js預編譯的四部曲
再次複習了一下作用域和預編譯的知識仔細的看了下老師視訊和部落格 學習到了一些關於預編譯和作用域的知識和大家分享一下! 眾所周知javascript是解釋性語言,主要特點為解釋一行執行一行。 而在js執行時會進行三件事:1語法分析 2.預編譯 3.解釋執行
C++原始碼生成可執行檔案的四個步驟
以GCC編譯器為例: 第一步,預處理,包括語法檢查等工作。 $ gcc -P abc.c 會生成abc.i檔案。 第二步,編譯,由源程式生成組合語言程式碼。 $ gcc -S abc.c 會生成abc.s檔案,這個檔案就是彙編程式碼。 第三步,彙編,編譯器生成目的碼,一個源
JDBC的四個步驟和程式碼實現
JDBC是從JAVA中連線MySQL資料庫的驅動,我們可以使用程式語言來實現它,其實它的實現是固定的,只用按照這個思路和步驟就可以了。 實現分為下面四個步驟:1.註冊驅動2.獲得連線物件3.獲取statement物件4.釋放資源 在我們程式設計時如果需要操作資料庫只需要按
四個步驟教你寫好一款產品的運營資料分析報告(轉)
收藏~ 遊戲運營期間,我們可以在後臺看到一堆遊戲相關資料,對於這些資料我們要怎麼怎麼進行處理分析呢?下面將圍繞一份報告例項做詳細的分析。內容主要包括分析目標、分析綜述、一週運營資料分析、運營資料總體分析四塊內容 一、 確定分析目標 分析目標主要包括以下三個方面: ●
js預編譯AO物件及GO物件
簡單談一下js的預編譯過程。 function test(a,b){ console.log(a) var a=123; function a(){} console.log(b) var b=234; console.lo
設定為預設簡訊應用四個步驟
<!-- 具備簡訊預設應用條件 ① --> <intent-filter> <action android:name="android.intent.acti