
了解 JavaScript 的核心概念可以讓開發(fā)人員達(dá)到一個(gè)全新的水平,JavaScript 最重要的概念之一是執(zhí)行上下文,它無(wú)處不在——每次你開始使用 JavaScript 創(chuàng)建東西時(shí),無(wú)論你是否知道,你都會(huì)在后臺(tái)使用它。每次新應(yīng)用程序啟動(dòng)時(shí),每次執(zhí)行函數(shù)時(shí),執(zhí)行上下文都會(huì)在那里。那么,什么是執(zhí)行上下文。
執(zhí)行上下文允許 JavaScript 引擎管理解釋和運(yùn)行代碼的復(fù)雜性。執(zhí)行上下文是一個(gè)抽象概念,它包含有關(guān)當(dāng)前代碼正在執(zhí)行的環(huán)境的信息。我們有三種不同類型的JavaScript 執(zhí)行上下文:全局執(zhí)行上下文——這個(gè)執(zhí)行上下文由 JavaScript 引擎默認(rèn)創(chuàng)建。函數(shù)執(zhí)行上下文 - 每當(dāng)執(zhí)行函數(shù)時(shí)都會(huì)創(chuàng)建此執(zhí)行上下文。eval 執(zhí)行上下文——這個(gè)執(zhí)行上下文是在一個(gè) eval 函數(shù)中創(chuàng)建的。
1. 全局執(zhí)行上下文
第一個(gè)執(zhí)行上下文是在 JavaScript 引擎運(yùn)行您的代碼時(shí)創(chuàng)建的。 JavaScript 引擎在執(zhí)行任何代碼之前都會(huì)創(chuàng)建一個(gè)新的執(zhí)行上下文,這個(gè)新的執(zhí)行上下文稱為全局執(zhí)行上下文。全局執(zhí)行上下文是 JavaScript 引擎創(chuàng)建的默認(rèn)執(zhí)行上下文。所有不在函數(shù)或?qū)ο髢?nèi)的全局代碼都將在全局執(zhí)行上下文中執(zhí)行。
每個(gè)執(zhí)行上下文(不僅僅是全局上下文)都將包含兩件事:A global object——提供在當(dāng)前環(huán)境中任何地方都可用的變量和函數(shù)。在瀏覽器中,全局對(duì)象被命名為window,使用 Node.js 時(shí),全局對(duì)象被命名為 global。A this object – this 關(guān)鍵字指向代碼所屬的當(dāng)前執(zhí)行上下文對(duì)象。
即使我們沒(méi)有編寫任何代碼,JavaScript 引擎仍然會(huì)創(chuàng)建一個(gè)全局執(zhí)行上下文。 JavaScript 是一種單線程編程語(yǔ)言,因此 JavaScript 執(zhí)行不可能有多個(gè)全局執(zhí)行上下文。最初,全局執(zhí)行上下文有兩個(gè)階段:創(chuàng)建——在這個(gè)階段,全局對(duì)象和 this 關(guān)鍵字被創(chuàng)建。 為創(chuàng)建的變量和函數(shù)分配內(nèi)存。 你可以看到我們的變量持有“未定義”的值。執(zhí)行——在這個(gè)階段,代碼的執(zhí)行開始了。 在我們的示例中,我們?yōu)樽兞抠x值并定義了函數(shù)。
2. 函數(shù)執(zhí)行上下文
執(zhí)行函數(shù)時(shí)會(huì)創(chuàng)建函數(shù)執(zhí)行上下文。創(chuàng)建的新執(zhí)行上下文是函數(shù)執(zhí)行上下文。它具有相同的階段,我們可以訪問(wèn)一個(gè)稱為參數(shù)的特殊值。參數(shù)值是我們?cè)趫?zhí)行函數(shù)時(shí)傳遞給函數(shù)的參數(shù)。一個(gè)函數(shù)可以在其中執(zhí)行一個(gè)函數(shù),依此類推。每次執(zhí)行函數(shù)時(shí),都會(huì)創(chuàng)建一個(gè)新的函數(shù)執(zhí)行上下文。
3. eval 執(zhí)行上下文
創(chuàng)建 eval 函數(shù)是為了將字符串轉(zhuǎn)換為可執(zhí)行的 JavaScript 代碼。雖然看起來(lái)很強(qiáng)大,但不建議使用這個(gè)功能,因?yàn)槲覀儫o(wú)法控制它的權(quán)限。eval 函數(shù)的使用可能會(huì)使您的應(yīng)用程序或服務(wù)受到注入攻擊。 eval 函數(shù)接收到的字符串可能是惡意字符串,可以完全破壞您的數(shù)據(jù)庫(kù)或應(yīng)用程序。這就是為什么不推薦使用 eval 函數(shù)的原因。
JavaScript 的核心概念可以徹底改變開發(fā)現(xiàn)代應(yīng)用程序的游戲規(guī)則。執(zhí)行上下文是了解 JavaScript 代碼如何在后臺(tái)運(yùn)行的一個(gè)非常重要的概念。它存在于每個(gè)編寫的 JavaScript 代碼中,它是學(xué)習(xí)其他 JavaScript 概念(如提升、閉包、作用域等)的要求之一。 注:尊重原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明出處和鏈接 http://elsolbar.com/news-id-20832.html 違者必究!部分文章來(lái)源于網(wǎng)絡(luò)由培訓(xùn)無(wú)憂網(wǎng)編輯部人員整理發(fā)布,內(nèi)容真實(shí)性請(qǐng)自行核實(shí)或聯(lián)系我們,了解更多相關(guān)資訊請(qǐng)關(guān)注web前端頻道查看更多,了解相關(guān)專業(yè)課程信息您可在線咨詢也可免費(fèi)申請(qǐng)?jiān)囌n。關(guān)注官方微信了解更多:150 3333 6050