亚洲 国产精品 日韩-亚洲 激情-亚洲 欧美 91-亚洲 欧美 成人日韩-青青青草视频在线观看-青青青草影院

千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > JavaScript如何執行上下文

JavaScript如何執行上下文

來源:千鋒教育
發布人:wjy
時間: 2022-09-16 11:32:16 1663299136

  今天這篇文章,我們將了解 JavaScript 提供的黑盒,讓我們的代碼神奇地運行“執行上下文”。

  這是迄今為止最重要的主題之一,它可以使你對其他關鍵主題一目了然,例如,作用域、詞法作用域、閉包和提升,而且學習JavaScript的真正工作原理很有趣。

  到目前為止,在代碼編輯器(Vs code )中編寫的每一行混亂代碼都在我們現在將討論的這個執行上下文中運行。

  坐下來,放松一下,收拾好你的美食,因為我會讓你明白的。

  在 JavaScript 中,一切都發生在執行上下文中,我的意思是一切。你可以將其視為評估和執行 JavaScript 代碼的環境。

  每當你的瀏覽器與任何 JavaScript 代碼交叉路徑時,瀏覽器的 JavaScript 引擎就會創建一個特殊的環境來處理此 JavaScript 代碼的轉換和執行。這個環境被稱為執行上下文。

  執行上下文包含當前正在運行的代碼以及有助于其執行的所有內容。

  執行上下文的類型

  當你在瀏覽器中運行腳本時,javascript 引擎會創建不同類型的執行上下文。

  全局執行上下文 (GEC)

  當你第一次運行腳本或你的代碼不在任何函數中時,它會被放置在全局執行上下文 (GEC) 中。

  在這里,每當 JavaScript 引擎接收到一個腳本文件時,它首先會創建一個默認執行上下文,這就是我們所說的全局執行上下文 (GEC)。它是一個基本/默認執行上下文,所有不在函數內部的代碼都會在其中執行。

  注意:每個 JavaScript文件只有一個 GEC

  函數執行上下文 (FEC)

  每當你的 JavaScript 引擎遇到函數調用時,它都會在全局執行上下文中創建一種稱為函數執行上下文的不同類型的 EC,以評估和執行該函數內部編寫的代碼。

  每個函數調用都有自己的 FEC(即使你多次調用同一個函數),因此,在腳本運行時可以有多個 FEC。

  它們是如何創建的?

  現在執行上下文的創建分兩個階段進行:

  創建階段

  執行階段

  1、創建階段

  在此階段,將創建一個執行上下文對象 (ECO),其中包含我們的代碼在其運行時(執行階段)使用的重要信息/數據。

  屬性在此對象 (ECO) 中分三個不同階段進行設置和定義。

  創建變量對象 (VO)。

  創建范圍鏈。

  賦予此關鍵字價值。

  階段 1:變量對象的創建

  變量對象就像一個在執行上下文中創建的容器,它將變量和函數聲明存儲在鍵:值對(不是函數表達式)中。

  在 GEC 中,使用 var 關鍵字聲明的每個變量都會向指向該變量的變量對象添加一個屬性,并將其值設置為未定義,使用 let 或 const 聲明的變量獲取未初始化的值,而在函數聲明中,一個屬性被添加到指向該函數的變量對象中,所有的函數聲明都將被存儲并可以在 VO 中訪問,甚至在代碼開始運行之前。

  在 FEC 中,不會創建此變量對象,而是構造了一個名為“argument”的類似數組的對象,其中包括提供給該函數的所有參數。

  這種甚至在代碼執行之前就將變量和函數(聲明)存儲在內存中,這就是我們所說的提升。

  第 2 階段:創建范圍鏈

  在 JavaScript 中,作用域是一種了解一段代碼對腳本其他域的可訪問性的方法。

  每個函數執行上下文都會創建它的作用域,可以將其視為一個環境或空間,它定義的變量和函數可以通過一個稱為作用域的進程來訪問。現在,當一個函數(比如 X() )在另一個函數(比如 Y() )中定義時,這個內部函數 X() 將可以訪問變量,并且在外部函數 Y() 中定義的其他函數也將具有訪問外部函數的代碼,但事情并不止于此,它還可以訪問其父元素的代碼等等,直到 GCE,這種行為就是我們所說的詞法作用域,但反過來不是真的。

  這個作用域的概念在JavaScript 中引發了一個被稱為閉包的相關現象,即使在外部函數執行完成之后,內部函數也可以訪問與外部函數關聯的代碼……它已經死了,消失了,很久了走了。

JavaScript 如何執行上下文1

  讓我們再看一個例子來理解作用域鏈。

JavaScript 如何執行上下文2

  這里變量 a 和 b 沒有在函數 second() 中定義,它只能訪問在其自己的范圍(本地范圍)中定義的變量 c,但是由于詞法范圍,它可以訪問它所在的函數以及它的父母。因此,當你運行此代碼時,JavaScript 引擎將無法找到變量 a 或 b,因此,它將沿著執行上下文鏈首先找到 b 并解析它,因為它已在函數 first() 范圍內成功找到它,解析后繼續查找變量 a ,JavaScript 引擎為該變量一直到全局執行上下文并解析它。

  這個 JavaScript 引擎沿著不同執行上下文鏈向上的過程,或者我們可以說遍歷執行上下文的范圍以解析變量或函數調用/調用,稱為 Scope Chaining。

  第 3 階段:設置“this”關鍵字的值

  在 javascript 中,this 關鍵字是指執行上下文所屬的范圍。

  在 GEC 中,這指的是一個全局對象,在瀏覽器的情況下是一個窗口對象。因此,在函數聲明中,使用“var”關鍵字初始化的變量分別作為方法和屬性分配給這個全局對象。

  所以

JavaScript 如何執行上下文3

  與以下內容相同

JavaScript 如何執行上下文4

  但在 FEC 的情況下,它不會創建“this”關鍵字,而是可以訪問定義它的環境的關鍵字。

  執行階段

  在執行上下文的這個階段,我們的代碼開始執行,執行后從執行堆棧或調用堆棧彈出,我們將在本文后面介紹。

  到目前為止,Variable 對象包含值為 undefined 和 uninitialized 的變量,具體取決于變量是分別使用 var 關鍵字還是使用 let/const 聲明的。

  這里 JavaScript引擎再次讀取 EC 中的代碼,用它們的實際值更新這些變量。然后代碼被解析,被轉譯,最后被執行

  執行堆棧(調用堆棧)

  你有沒有想過 JavaScript 引擎如何跟蹤它在腳本運行時創建的各種 EC 的所有這些創建和刪除?答案是執行堆棧或簡單的調用堆棧。

  “JavaScript 是一種同步的單線程語言”

  單線程是指它只能夠一次執行一個任務,一次是一行代碼,而同步是指這些任務的執行以特定的順序發生。因此,當 JavaScript 引擎讀取腳本時,它會創建不同的執行上下文并將它們存儲在稱為調用堆棧或執行堆棧的堆棧數據結構中。

JavaScript 如何執行上下文5

  當腳本在瀏覽器中加載時,瀏覽器的 JS 引擎首先會創建一個我們在上面詳細介紹過的默認特殊環境,即全局執行上下文,并將其推送到此執行堆棧。

  之后,當 JS 引擎發現函數調用時執行文件時,它會為其創建一個單獨的函數執行上下文,如下圖所示(步驟 2),并將其推送到現有默認 GEC 之上的堆棧中。

JavaScript 如何執行上下文6

  在執行 firstFunc() 時,它遇到對 secondFunc() 的調用,它暫停 firstFunc() 的執行并創建另一個 FEC 并推送到 firstFunc() FEC 頂部的堆棧,然后再次為 thirdFunc() 創建一個單獨的 FEC 稱呼。

  頂部的 EC 將首先由 JS 引擎執行,執行完成后,它會從堆棧中彈出,并開始執行上一個活動 EC 下面的 EC,如上圖所示,直到到達 GEC。

  結論

  執行上下文是 JavaScript 的核心,理解它很重要,因為它可以幫助你正確理解其他主要概念。

tags:
聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT
開班信息
北京校區
  • 北京校區
  • 大連校區
  • 廣州校區
  • 成都校區
  • 杭州校區
  • 長沙校區
  • 合肥校區
  • 南京校區
  • 上海校區
  • 深圳校區
  • 武漢校區
  • 鄭州校區
  • 西安校區
  • 青島校區
  • 重慶校區
  • 太原校區
  • 沈陽校區
  • 南昌校區
  • 哈爾濱校區
青青草无码伊人久久| 中英字幕乱码在线观看| 少女たちよ在线观看完整版动漫| 老赵抱着媛媛在厨房做饭视频| 国产AV精国产传媒| 成人免费无码大片A毛片抽搐| 雨后小故事完整版| 亚洲国产精品VA在线看黑人| 天干天干啦夜天干天天爽| 欧美虐SM另类残忍视频| 老色鬼久久亚洲AV综合| 极品人妻系列人妻30P| 国产成人亚洲精品无码高潮| 国产97在线 | 欧美| MM1313亚洲精品无码久久| 99国精产品灬源码168| 中文字幕人成乱码中国| 又爽又黄又无遮挡的视频在线观看| 亚洲国产成人一区二区三区| 亚洲AV日韩AV激情亚洲| 无码人妻毛片丰滿熟婦区毛片色欲| 日韩系列中文无码| 色8激情欧美成人久久综合电影| 人物动物交互第LL0集| 日韩一区二区在线视频| 日日猛噜噜狠狠扒开双腿小说| 欧美XXXX做受性欧美88| 欧美无MATE30PRO巨| 日本乱人伦AⅤ精品潮喷| 偷拍 拍自 欧美色区| 亚洲AV永久无码精品成人| 野花电影3在线观看免费| 最新精品国偷自产在线下载| YY8090福利午夜理论片| 锕锕锕锕锕锕锕锕轻点好疼视频 | XXXX18一20岁HD第一次| FREE嫩白18SEⅩ性HD处| OM老熟女HDXⅩXXX69| 中文字幕伊人久久| ASS黑森林PIC| 大学生高潮无套内谢视频| MM131美女大尺度私密照尤果| SQUIRT VIDEO喷水抽| 成人夜间av大片免费观看| 国产成人午夜无码电影在线观看| 国产午夜精品理论片| 精品国产一区二区三区久久影院| 国产亚洲成AⅤ人片在线观看麻豆| 狠狠色丁香久久婷婷综合五月 | 亚洲区综合区小说区激情区| 一级伦奷片高潮无码看了5| 51无人区码一码二码三码| 色综合久久婷婷88| 色悠久久久久久久综合网| 三上悠亚SSNL-618无码播| 亚洲AⅤ成人精品无码| 一面亲上边一面膜| 差差差不多视频30分钟轮滑| 国产欧美日韩VA另类在线播放| 久久97超碰色中文字幕蜜芽| 久久人人爽人人爽AV片| 秋霞国产午夜伦午夜福利片| 无码高潮少妇毛多水多水免费| 五十路熟妇无码专区| 一女三黑人玩4P惨叫| AV永久天堂一区二区三区| 宝贝乖女你的奶真大水真多小说| 国产免费无遮挡吸奶头视频| 极品少妇XXXX精品少妇小说| 欧美JIZZ18性欧美| 午夜.DJ高清在线观看免费7| 又大又硬又粗再深一点视频| 公司办公桌C了我好几次| 国产高清不卡一区二区| 免费无码久久成人网站| 日韩无码视频一区二区| 亚洲 日韩 激情 无码 中出| 亚洲自偷自拍熟女另类| 国产高清在线精品一本大道| 久久W5WW成W人免费| 少妇高潮惨叫喷水在线观看| 永久免费看啪啪的网站| 国产精品美女久久久久AV福利| 女の乳搾りです在线观看| 上司人妻互换HD无码| 97久久超碰极品视觉盛宴| 精品国产乱码久久久久夜深人妻| 日韩乱妇乱女熟妇熟女AV| 亚洲精品无码AⅤ片桃花岛| 菠萝蜜视频APP在线观看| 老公和兄弟一前一后攻击 | 47147大但人文艺术怎么样| 高雅人妻被迫沦为玩物电影BD| 免费A级毛片无码A∨中文字幕下| 少妇又爽又刺激视频| 99精品视频在线观看免费蜜桃| 精品卡一卡二卡3卡高清乱码| 天黑黑影院在线观看免费中文 | 国产精品久久久久秋霞鲁丝| 人妻免费一区二区三区最新| 在线精品亚洲一区二区绿巨人| 韩国三级在线观看| 无码人妻久久1区2区3区| 97精品伊人久久大香线蕉 | 98人妻人人揉人人躁88Av| 久久人人爽人人爽人人片AV超碰 | 久久精品国产一区二区无码| 亚洲AV无码国产精品色午友情链| 公车人妻中出中文字幕| 日韩精品无码免费一区二区三区| AA丁香综合激情| 久久婷婷五月综合色区| 一本一道波多野结衣一区| 精品人妻少妇敕草AV无码专区 | 亚洲狠狠色丁香婷婷综合| 国产999精品久久久久久| 少妇扒开腿让我爽了一夜| 大香伊蕉AⅤ在人线国产| 色婷婷综合久久久久中文字幕| 车后车座的疯狂的做的视频| 女人带毛的真人图片| A级毛片无码兔费真人久久| 久久丫精品国产亚洲AV不卡| 在线播放免费人成毛片软件| 毛葺葺老太做受视频| 亚洲熟妇无码一区二区三区导航| 久久99精品久久久久麻豆| 亚洲综合熟女久久久30P| 免费A级毛片无码专区| 夜夜爽夜夜叫夜夜高潮| 秘书在办公室被躁到高潮 | 激情欧美成人小说在线视频| 亚洲情文字幕在线一区| 免费高清视频 大片| WWW亚洲精品久久久| 我和丰满女教练在线观看| 国产精品无码久久久久| 亚洲乱码日产精品BD在观看| 麻豆产精国品一二三产区区| 把佛珠一个一个挤出去| 无人区一码二码三码区别在哪| 国产精品国产三级国产AN| 亚洲午夜无码片在线观看影院| 久久久久久伊人高潮影院| YYYY11111少妇影院| 日韩AV一卡2卡3卡4卡新区乱| 国产熟女露脸大叫高潮| 夜夜揉揉日日人人青青| 日韩精品无码免费一区二区三区| 俄罗斯美女做爰XXXⅩ啪啪 | 国产无套内射普通话对白| 中文字幕三级人妻无码视频| 日韩激情无码免费毛片| 国精产品一码二码三M| AV天堂影音先锋AV色资源网站| 日出水了好深好涨| 久久国产劲爆∧V内射| 24小时日本在线| 我的真實亂倫故事| 久久久WWW成人免费精品| 从厨房一路干到卧室好吗| 亚洲AV无码国产精品色午| 欧美熟妇精品一区二区蜜桃视频| 国产亚洲欧美日韩俺去了| A级毛片免费网站| 亚洲欧洲无码一区二区三区| 日本公妇在线观看中文版| 久久精品中文字幕有码| 成人免费高清A级毛片| 亚洲国产婷婷综合在线精品| 女士不遮阴小内搭| 精品久久久久久无码中文字幕一区| 成人精品一二三区| 中文字幕丝袜人妻制服丝袜在线| 少妇 精69XXXXXx白浆| 蜜臀AV在线播放| 娇小12-13╳YⅩ╳毛片高清| 国产极品粉嫩馒头一线天AV| YY111111少妇影院免费观| 亚洲精品无码专区久久| 少妇人妻互换不带套| 免费A级毛片无码视频| 国内精品久久久人妻中文字幕| А√天堂资源在线地址BT| 亚洲午夜无码片在线观看影院百度 | 菠萝菠萝蜜免费播放视频| 1区1区3区4区产品乱码芒果| 亚洲一区精品无码| 亚洲AV永久无码精品网站色欲| 人与性动交AAAABBBB| 人妻中文无码就熟专区| 欧美三级一区二区| 欧美巨大XXXX做受高清| 久久久久蜜桃精品成人片| 娇小亚洲人Ms黑人| 黑人巨大精品人妻一区二区 | 久久久精品中文字幕麻豆发布| 国产一区在线观看二区| 国产AV无码专区亚洲精品| 公交车强摁做开腿呻吟|