Web前端培訓中JavaScript怎樣執(zhí)行上下文
2022-02-14點擊量:208
了解JavaScript的核心概念可以讓開發(fā)人員達到一個全新的水平,JavaScript最重要的概念之一是執(zhí)行上下文,它無處不在——每次你開始使用JavaScript創(chuàng)建東西時,無論你是否知道,你都會在后臺使用它。每次新應用程序啟動時,每次執(zhí)行函數時,執(zhí)行上下文都會在那里。那么,什么是執(zhí)行上下文。執(zhí)行上下文允許JavaScript引擎管理解釋和運行代碼的復雜性。執(zhí)行上下文是一個抽象概念,它包含有關當前代碼正在執(zhí)行的環(huán)境的信息。我們有三種不同類型的JavaScript執(zhí)行上下文:全局執(zhí)行上下文——這個執(zhí)行上下文由JavaScript引擎默認創(chuàng)建。函數執(zhí)行上下文-每當執(zhí)行函數時都會創(chuàng)建此執(zhí)行上下文。eval執(zhí)行上下文——這個執(zhí)行上下文是在一個eval函數中創(chuàng)建的。1.全局執(zhí)行上下文第一個執(zhí)行上下文是在JavaScript引擎運行您的代碼時創(chuàng)建的。JavaScript引擎在執(zhí)行任何代碼之前都會創(chuàng)建一個新的執(zhí)行上下文,這個新的執(zhí)行上下文稱為全局執(zhí)行上下文。全局執(zhí)行上下文是JavaScript引擎創(chuàng)建的默認執(zhí)行上下文。所有不在函數或對象內的全局代碼都將在全局執(zhí)行上下文中執(zhí)行。每個執(zhí)行上下文(不僅僅是全局上下文)都將包含兩件事:Aglobalobject——提供在當前環(huán)境中任何地方都可用的變量和函數。在瀏覽器中,全局對象被命名為window,使用Node.js時,全局對象被命名為global。Athisobject–this關鍵字指向代碼所屬的當前執(zhí)行上下文對象。即使我們沒有編寫任何代碼,JavaScript引擎仍然會創(chuàng)建一個全局執(zhí)行上下文。JavaScript是一種單線程編程語言,因此JavaScript執(zhí)行不可能有多個全局執(zhí)行上下文。最初,全局執(zhí)行上下文有兩個階段:創(chuàng)建——在這個階段,全局對象和this關鍵字被創(chuàng)建。為創(chuàng)建的變量和函數分配內存。你可以看到我們的變量持有“未定義”的值。執(zhí)行——在這個階段,代碼的執(zhí)行開始了。在我們的示例中,我們?yōu)樽兞抠x值并定義了函數。2.函數執(zhí)行上下文執(zhí)行函數時會創(chuàng)建函數執(zhí)行上下文。創(chuàng)建的新執(zhí)行上下文是函數執(zhí)行上下文。它具有相同的階段,我們可以訪問一個稱為參數的特殊值。參數值是我們在執(zhí)行函數時傳遞給函數的參數。一個函數可以在其中執(zhí)行一個函數,依此類推。每次執(zhí)行函數時,都會創(chuàng)建一個新的函數執(zhí)行上下文。3.eval執(zhí)行上下文創(chuàng)建eval函數是為了將字符串轉換為可執(zhí)行的JavaScript代碼。雖然看起來很強大,但不建議使用這個功能,因為我們無法控制它的權限。eval函數的使用可能會使您的應用程序或服務受到注入攻擊。eval函數接收到的字符串可能是惡意字符串,可以完全破壞您的數據庫或應用程序。這就是為什么不推薦使用eval函數的原因。JavaScript的核心概念可以徹底改變開發(fā)現代應用程序的游戲規(guī)則。執(zhí)行上下文是了解JavaScript代碼如何在后臺運行的一個非常重要的概念。它存在于每個編寫的JavaScript代碼中,它是學習其他JavaScript概念(如提升、閉包、作用域等)的要求之一。...