在JavaScript中,預編譯就是程式碼執行前進行的一項操作,會把變數宣告提前,函數宣告也提前,把這些依照一定的規則,放在建立的物件裡面去的一個過程。
本教學操作環境:windows10系統、javascript1.8.5版、Dell G3電腦。
javascript中什麼是預編譯
js運行三部曲
1.語法分析 : js引擎在解析js程式碼之前,會先通篇掃描一下,找出低階的文法錯誤,例如寫錯大括號之類的。
2.預先編譯 任何的語法和語句全部會被轉換成對象,GO(Global Object),AO(Active Object)把程式碼依照 一定的規則,放到GO和AO中
3.解釋執行 編譯一行執行一行,當語法分析沒有問題,並且已經完成預編譯階段之後,就開始解釋執行程式碼
什麼的預編譯?
預先編譯就是在JavaScript程式碼前進行的一項操作會把變數宣告提前,函數宣告也會提前,把這些程式碼依照一定的規則,放在建立的物件裡面去。
預先編譯的過程:
GO window預編譯
1,在執行script標籤的一瞬間創建一個GO物件
2,尋找變量聲明,變數名作為GO物件的屬性名,值為undefined。
3,尋找函數聲明,函數名稱作為GO物件的屬性名,值為函數體,如果函數名稱和變數名稱一樣,直接覆寫
AO 函數預編譯
1,在函數執行的一瞬間創建一個AO物件
2,尋找實參和形參,將形參作為AO物件的屬性名稱添加到物件中,值為實參,值得注意的是,函數宣告不叫變數。如果沒有實參值就是undefined。
3,找出變數聲明,變數名作為AO物件的屬性名,值為undefined。如果變數名和形參名一樣不用管。
4 ,尋找函數聲明,函數名稱作為AO物件的屬性名,值為函數體,如果函數名和變數名一樣,直接覆寫
下面我們來寫一段程式碼來簡單介紹一哈函數預編譯的過程
function fun(a,b){ console.log(a); var a = 10; console.log(a); function a(){} console.log(a) a = 1; var b; console.log(b); var b = function(){} console.log(b); } fun(1,2);
1首先在執行fun之前會建立一個AO物件。
funAO{ }
2,尋找實參和形參,將形參作為AO物件的屬性名稱加入物件中,值為實參,值得注意的是,函數宣告不叫變數。如果沒有實參值就是undefined。
funAO{ a : 1, b : 2 }
3,尋找變數聲明,變數名作為AO物件的屬性名,值為undefined。如果變數名和形參名一樣不用管
funAO{ a : 1, b : 2 }
4 ,尋找函數聲明,函數名稱作為AO物件的屬性名,值為函數體,如果函數名和變數名一樣,直接覆寫
funAO{ a : function a(){}, b : 2 }
解釋執行
function fun(a,b){ console.log(a); //往上面的AO对象里面寻找,a的值是function a(){}。 这里就输出function a(){} var a = 10; console.log(a);//上面一行代码把a赋值10 ,所以这里输出10 function a(){} console.log(a)//这里也是10,因为上面函数已经提前了 a = 1; var b; console.log(b);//往上面的AO对象里面寻找,b的值是2。 这里就输出2 var b = function(){}//这里的函数为啥不能提前,因为这里的是一个函数表达式,这个函数没有函数名所以不能提前。 console.log(b);//这里把b赋值function(){},所以这里输出function(){} } fun(1,2);
還有一個可能
function add(){ //这里的话碰到if判断,for....除了function作用域之外的咱们都得正常分析, //所以这里的值为undefined其实就是var a提前了赋值undefined console.log(a);//这里的输出结果为?undefined if(a){ var a = 10; } //这里是把a的值传入判断里面undefined返回的是false所以进不去,值就不会改变这里还是undefined console.log(a);//undefined } add();
這上面就是預編譯的執行過程!
相關推薦:javascript學習教學
以上是javascript中什麼是預編譯的詳細內容。更多資訊請關注PHP中文網其他相關文章!

selectUsestate()forsimple,獨立的variables; useusereducer()forcomplexstateLogicorWhenStatedIppedsonPreviousState.1)usestate()isidealForsImpleupDatesLikeToggGlikGlingaBglingAboolAboolAupDatingacount.2

useState優於類組件和其它狀態管理方案,因為它簡化了狀態管理,使代碼更清晰、更易讀,並與React的聲明性本質一致。 1)useState允許在函數組件中直接聲明狀態變量,2)它通過鉤子機制在重新渲染間記住狀態,3)使用useState可以利用React的優化如備忘錄化,提升性能,4)但需注意只能在組件頂層或自定義鉤子中調用,避免在循環、條件或嵌套函數中使用。

useUsestate()forlocalComponentStateMangementighatighation; 1)usestate()isidealforsimple,localforsimple.2)useglobalstate.2)useglobalstateSolutionsLikErcontExtforsharedState.3)

ReusableComponentsInrectenHanceCodainainability and效率byallowingDevelostEsteSeTheseTheseThesAmeCompOntionActActRossDifferentPartSofanApplicationorprojects.1)heSredunceRedUndenceNandSimplifyUpdates.2)yensureconsistencyInuserexperience.3)

TheVirtualDOMisalightweightin-memorycopyoftherealDOMusedbyReacttooptimizeUIupdates.ItboostsperformancebyminimizingdirectDOMmanipulationthroughaprocessofupdatingtheVirtualDOMfirst,thenapplyingonlynecessarychangestotheactualDOM.

HTML與React可以通過JSX無縫整合,構建高效的用戶界面。 1)使用JSX嵌入HTML元素,2)利用虛擬DOM優化渲染性能,3)通過組件化管理和渲染HTML結構。這種整合方式不僅直觀,還能提升應用性能。

React通過state和props高效渲染數據,並通過合成事件系統處理用戶事件。 1)使用useState管理狀態,如計數器示例。 2)事件處理通過在JSX中添加函數實現,如按鈕點擊。 3)渲染列表需使用key屬性,如TodoList組件。 4)表單處理需使用useState和e.preventDefault(),如Form組件。

React通過HTTP請求與服務器交互,實現數據的獲取、發送、更新和刪除。 1)用戶操作觸發事件,2)發起HTTP請求,3)處理服務器響應,4)更新組件狀態並重新渲染。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

Atom編輯器mac版下載
最受歡迎的的開源編輯器

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

禪工作室 13.0.1
強大的PHP整合開發環境

WebStorm Mac版
好用的JavaScript開發工具