偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

一篇帶你了解JS 執(zhí)行上下文與作用域

開發(fā) 前端
執(zhí)行上下文是JavaScript代碼執(zhí)行的環(huán)境,包括變量對(duì)象、作用域鏈和this等元素。了解執(zhí)行上下文的創(chuàng)建過程和作用可以幫助開發(fā)者更好地理解和調(diào)試JavaScript代碼。

JavaScript中的執(zhí)行上下文是指JavaScript代碼執(zhí)行的環(huán)境,它包括變量、函數(shù)、作用域和this等元素。在JavaScript中,每當(dāng)函數(shù)執(zhí)行時(shí),都會(huì)創(chuàng)建一個(gè)新的執(zhí)行上下文。

執(zhí)行上下文分為全局執(zhí)行上下文和函數(shù)執(zhí)行上下文兩種。

全局執(zhí)行上下文

全局執(zhí)行上下文是在頁(yè)面加載時(shí)創(chuàng)建的,它是整個(gè)JavaScript代碼的最外層環(huán)境,包含了所有的全局變量、函數(shù)和this等元素。

函數(shù)執(zhí)行上下文

函數(shù)執(zhí)行上下文是在函數(shù)被調(diào)用時(shí)創(chuàng)建的,它包含了函數(shù)內(nèi)部的變量、函數(shù)和this等元素。每當(dāng)函數(shù)被調(diào)用時(shí),都會(huì)創(chuàng)建一個(gè)新的函數(shù)執(zhí)行上下文。

函數(shù)執(zhí)行上下文包括三個(gè)重要的元素:

  • 變量對(duì)象(Variable Object,VO):包含了函數(shù)內(nèi)部的變量和函數(shù)聲明。
  • 作用域鏈(Scope Chain):用于解決變量訪問的問題,它是一個(gè)由多個(gè)執(zhí)行上下文的變量對(duì)象組成的鏈?zhǔn)浇Y(jié)構(gòu)。
  • this指針:指向函數(shù)被調(diào)用時(shí)的當(dāng)前對(duì)象。

執(zhí)行上下文的創(chuàng)建過程分為兩個(gè)階段:創(chuàng)建階段和代碼執(zhí)行階段。

創(chuàng)建階段

在創(chuàng)建階段,JavaScript引擎會(huì)進(jìn)行以下操作:

  • 創(chuàng)建變量對(duì)象:函數(shù)執(zhí)行上下文中的變量對(duì)象包括所有的函數(shù)參數(shù)、函數(shù)聲明和變量聲明等。
  • 建立作用域鏈:JavaScript引擎會(huì)將當(dāng)前執(zhí)行上下文的變量對(duì)象添加到作用域鏈的最前端。
  • 確定this指針:this指針的值取決于函數(shù)被調(diào)用時(shí)的環(huán)境。

代碼執(zhí)行階段

在代碼執(zhí)行階段,JavaScript引擎會(huì)按照代碼的順序執(zhí)行代碼,并將變量的值存儲(chǔ)在變量對(duì)象中。

需要注意的是,JavaScript中的變量提升現(xiàn)象是由執(zhí)行上下文的創(chuàng)建階段所導(dǎo)致的。在創(chuàng)建階段中,JavaScript引擎會(huì)將變量聲明提升到當(dāng)前執(zhí)行上下文的頂部,因此在代碼執(zhí)行階段前就可以訪問到變量。

當(dāng)代碼運(yùn)行時(shí),會(huì)產(chǎn)生對(duì)應(yīng)的運(yùn)行環(huán)境,在這個(gè)環(huán)境中,所有的變量都會(huì)被實(shí)現(xiàn)提出來(lái)(變量提升),有的直接賦值,有的默認(rèn)賦值,有點(diǎn)默認(rèn)值 undefined ,代碼從上而下開始執(zhí)行,就叫做執(zhí)行上下文。

變量提升

foo // undefined
var foo = function () {
  console.log('foo1')
}

foo() // foo1, foo賦值

var foo = function () {
  console.log('foo2')
}

foo() // foo2, foo 賦值

函數(shù)提升

foo() // foo2
function () {
  console.log('foo1')
}

foo() // foo2

function foo () {
  console.log('foo2')
}
foo() // foo2

聲明優(yōu)先級(jí),函數(shù) > 變量

foo() // foo2
var foo = function () {
  console.log('foo1')
}

foo() // foo1, foo 重新賦值

function foo () {
  console.log('foo2')
}

foo() // foo1

總之,執(zhí)行上下文是JavaScript代碼執(zhí)行的環(huán)境,包括變量對(duì)象、作用域鏈和this等元素。了解執(zhí)行上下文的創(chuàng)建過程和作用可以幫助開發(fā)者更好地理解和調(diào)試JavaScript代碼。


責(zé)任編輯:姜華 來(lái)源: 今日頭條
相關(guān)推薦

2021-07-26 07:47:36

Cpu上下文進(jìn)程

2021-05-25 10:15:20

JavaScript 前端作用域

2015-07-08 10:25:05

Javascript上下文作用域

2021-11-24 08:51:32

Node.js監(jiān)聽函數(shù)

2020-02-21 10:09:06

調(diào)度進(jìn)程線程

2021-05-20 06:57:16

RabbitMQ開源消息

2022-09-14 13:13:51

JavaScript上下文

2025-01-08 11:10:46

2021-08-02 06:34:55

Redis刪除策略開源

2021-11-08 08:42:44

CentOS Supervisor運(yùn)維

2021-12-15 11:52:34

GPLLinuxGNU

2023-05-12 08:19:12

Netty程序框架

2021-07-28 10:02:54

建造者模式代碼

2021-08-11 07:02:21

npm包管理器工具

2021-06-30 00:20:12

Hangfire.NET平臺(tái)

2021-07-14 08:24:23

TCPIP 通信協(xié)議

2023-12-10 13:37:23

Python編程上下文管理

2020-07-24 10:00:00

JavaScript執(zhí)行上下文前端

2021-07-03 08:04:10

io_uringNode.js異步IO

2023-09-06 14:57:46

JavaScript編程語(yǔ)言
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)