了解 Javascript 的核心概念可以讓開發(fā)人員達到一個全新的水平,Javascript
最重要的概念之一是執(zhí)行上下文,它無處不在——每次你開始使用 Javascript
創(chuàng)建東西時,無論你是否知道,你都會在后臺使用它。每次新應用程序啟動時,每次執(zhí)行函數(shù)時,執(zhí)行上下文都會在那里。那么,什么是執(zhí)行上下文?對Javascript感興趣的同學,可以參加Web前端培訓,幾個月的學習就能掌握全面系統(tǒng)的知識和技能,快速上崗。
執(zhí)行上下文允許 Javascript
引擎管理解釋和運行代碼的復雜性。執(zhí)行上下文是一個抽象概念,它包含有關當前代碼正在執(zhí)行的環(huán)境的信息。
我們有三種不同類型的Javascript 執(zhí)行上下文:
全局執(zhí)行上下文——這個執(zhí)行上下文由 Javascript 引擎默認創(chuàng)建。
函數(shù)執(zhí)行上下文 - 每當執(zhí)行函數(shù)時都會創(chuàng)建此執(zhí)行上下文。
eval 執(zhí)行上下文——這個執(zhí)行上下文是在一個 eval 函數(shù)中創(chuàng)建的。
1. 全局執(zhí)行上下文
第一個執(zhí)行上下文是在 Javascript 引擎運行您的代碼時創(chuàng)建的。 Javascript
引擎在執(zhí)行任何代碼之前都會創(chuàng)建一個新的執(zhí)行上下文,這個新的執(zhí)行上下文稱為全局執(zhí)行上下文。
全局執(zhí)行上下文是 Javascript
引擎創(chuàng)建的默認執(zhí)行上下文。所有不在函數(shù)或對象內的全局代碼都將在全局執(zhí)行上下文中執(zhí)行。在Web前端培訓中,有理論課程+實踐項目一起學習,深化所學知識,積累項目經(jīng)驗,獲得快速提升。
每個執(zhí)行上下文(不僅僅是全局上下文)都將包含兩件事:
A global object——提供在當前環(huán)境中任何地方都可用的變量和函數(shù)。在瀏覽器中,全局對象被命名為window,使用
Node.js 時,全局對象被命名為 global。
A this object – this 關鍵字指向代碼所屬的當前執(zhí)行上下文對象。
即使我們沒有編寫任何代碼,Javascript 引擎仍然會創(chuàng)建一個全局執(zhí)行上下文。 Javascript
是一種單線程編程語言,因此 Javascript 執(zhí)行不可能有多個全局執(zhí)行上下文。
最初,全局執(zhí)行上下文有兩個階段:
創(chuàng)建——在這個階段,全局對象和 this 關鍵字被創(chuàng)建。 為創(chuàng)建的變量和函數(shù)分配內存。
你可以看到我們的變量持有“未定義”的值。
執(zhí)行——在這個階段,代碼的執(zhí)行開始了。 在我們的示例中,我們?yōu)樽兞抠x值并定義了函數(shù)。
2. 函數(shù)執(zhí)行上下文
執(zhí)行函數(shù)時會創(chuàng)建函數(shù)執(zhí)行上下文。
創(chuàng)建的新執(zhí)行上下文是函數(shù)執(zhí)行上下文。它具有相同的階段,我們可以訪問一個稱為參數(shù)的特殊值。參數(shù)值是我們在執(zhí)行函數(shù)時傳遞給函數(shù)的參數(shù)。參加Web前端培訓,可以讓你學到很多Javascript知識和技能,有經(jīng)驗豐富的專業(yè)講師面授指導教學,實時解決疑難雜癥問題,學習起來又快又有效。
一個函數(shù)可以在其中執(zhí)行一個函數(shù),依此類推。每次執(zhí)行函數(shù)時,都會創(chuàng)建一個新的函數(shù)執(zhí)行上下文。
3. eval 執(zhí)行上下文
創(chuàng)建 eval 函數(shù)是為了將字符串轉換為可執(zhí)行的 Javascript
代碼。雖然看起來很強大,但不建議使用這個功能,因為我們無法控制它的權限。
eval 函數(shù)的使用可能會使您的應用程序或服務受到注入攻擊。 eval
函數(shù)接收到的字符串可能是惡意字符串,可以完全破壞您的數(shù)據(jù)庫或應用程序。這就是為什么不推薦使用 eval 函數(shù)的原因。
Javascript 的核心概念可以徹底改變開發(fā)現(xiàn)代應用程序的游戲規(guī)則。執(zhí)行上下文是了解 Javascript
代碼如何在后臺運行的一個非常重要的概念。 它存在于每個編寫的 Javascript 代碼中,它是學習其他 Javascript
概念(如提升、閉包、作用域等)的要求之一。想學習更多Javascript知識和技能,不妨考慮參加Web前端培訓,可以在短時間獲得快速提升,有效提高前端開發(fā)工作效率。