国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JavaScript-作用域、塊級作用域、上下文、執行上下文、作用域鏈

Coding01 / 3561人閱讀

摘要:一旦函數執行完成,其就會從作用域鏈頂部移除,并且執行權會返回到函數。攀爬作用域鏈當不同執行上下文之間存在變量命名沖突,可以通過攀爬作用域鏈解決從頂部到底部。

一、作用域
在 JavaScript 中, 作用域(scope,或譯有效范圍)就是變量和函數的可訪問范圍,即作用域控制著變量和函數的可見性生命周期
二、全局/局部作用域 2.1 全局作用域(Global Scope)

(1)不在任何函數內定義的變量就具有全局作用域。

(2)實際上,JavaScript默認有一個全局對象window,全局作用域的變量實際上被綁定到window的一個屬性。

(3)window對象的內置屬性都擁有全局作用域,例如 window.name、window.location、window.top 等。

2.2 局部作用域(Local Scope)

(1)JavaScript的作用域是通過函數來定義的,在一個函數中定義的變量只對這個函數內部可見,稱為函數(局部)作用域

三、全局/局部變量
變量能夠被定義在局部或者全局作用域,這導致運行時變量的訪問來自不同的作用域。
3.1 全局變量

(1)在函數定義外聲明的變量是全局變量。

(2)全局變量有 全局作用域,它的值可在整個程序中訪問和修改

(3)如果變量在函數內沒有聲明(沒有使用 var 關鍵字),該變量為全局變量。

3.2 局部變量

(1)在函數定義內聲明的變量是局部變量。

(2)因為局部變量只作用于函數內,所以不同的函數可以使用相同名稱的變量。

(3)每當執行函數時,都會創建銷毀該變量,且無法通過函數之外的任何代碼訪問該變量。

(4)函數外無法訪問函數內的變量,函數內卻可以訪問函數外的變量。

四、全局變量
1、在函數定義外聲明的變量是全局變量;全局變量有全局作用域,它的值可在整個程序中訪問和修改。

2、如果變量在函數內沒有聲明(沒有使用 var 關鍵字),該變量為全局變量。

五、局部變量
1、因為局部變量只作用于函數內,所以不同的函數可以使用相同名稱的變量。

2、每當執行函數時,都會創建銷毀該變量,且無法通過函數之外的任何代碼訪問該變量。

3、函數外無法訪問函數內的變量,函數內卻可以訪問函數外的變量。

六、塊級作用域 6.1 概念
塊級作用域指在If語句,switch語句,循環語句等語句塊中定義變量,這意味著變量不能在語句塊之外被訪問。
6.2 var 不支持塊級作用域

(1)在If等語句塊中,定義的變量從屬于該塊所在的作用域,和函數不同,他們不會創建新的作用域。

6.3 let和const

(1)為了解決塊級作用域,ES6引入了 letconst 關鍵字,可以聲明一個塊級作用域的變量。

(2)全局作用域的生存周期與上述應用相同。局部作用域只在該函數調用執行期間存在。

七、上下文 vs 作用域

(1)首先需要說明的是上下文和作用域是不同的概念。

(2)每個函數調用都有與之相關的作用域和上下文。從根本上說,作用域是基于函數,而上下文是基于對象。

(3)作用域是和每次函數調用時變量的訪問有關,并且每次調用都是獨立的。上下文總是關鍵字 this 的值,是調用當前可執行代碼的對象的引用。

八、“this” 上下文

(1)上下文通常是取決于一個函數如何被調用。當函數作為對象的方法被調用時,this 指向調用方法的對象。

(2)當調用一個函數時,通過 new 操作符創建一個對象的實例,當以這種方式調用時,this 指向新創建的實例。

(3)當調用一個未綁定函數,this 默認指向全局上下文或者瀏覽器中的window對象。然而如果函數在嚴格模式下被執行(“use strict”),this 默認指向 undefined

九、執行上下文

(1)當函數執行時,會創建一個稱為執行上下文的內部對象(可理解為作用域,不是前面討論的上下文)。一個執行上下文定義了一個函數執行時的環境。

(2)函數每次執行時對應的執行上下文都是獨一無二的,所以多次調用一個函數會導致創建多個執行上下文。

(3)當javascript代碼文件被瀏覽器載入后,默認最先進入的是一個全局的執行上下文。當在全局上下文中調用執行一個函數時,程序流就進入該被調用函數內,此時引擎就會為該函數創建一個新的執行上下文,并且將其壓入到執行棧頂部(作用域鏈)。瀏覽器總是執行位于執行棧頂部的當前執行上下文,一旦執行完畢,該執行上下文就會從執行棧頂部彈出,并且控制權將進入其下的執行上下文。這樣,執行棧中的執行上下文就會被依次執行并且彈出,直到回到全局的執行上下文。

十、作用域鏈

(1)在JavaScript中,函數也是對象,對象中有些屬性我們可以訪問,但有些不可以(訪問),這些屬性僅供JavaScript引擎存取,[[scope]]就是其中一個。

(2)[[scope]]指的就是我們所說的作用域,其中存儲了執行上下文的集合。

(3)[[scope]]中所存儲的執行上下文對象的集合,這個集合呈鏈式鏈接,我們把這種鏈式鏈接叫做作用域鏈。

10.1 示例

(1)運行示例代碼將會導致嵌套的函數被從上倒下執行,一直到 fourth 函數,此時作用域鏈從上到下為: fourth, third, second, first, global。

(2)fourth 函數能夠訪問全局變量和任何定義在first,second和third函數中的變量(和訪問自己的變量一樣)。

(3)一旦fourth函數執行完成,其就會從作用域鏈頂部移除,并且執行權會返回到third函數。這個過程一直持續到所有代碼完成執行。

10.2 攀爬作用域鏈

(1)當不同執行上下文之間存在 變量命名沖突,可以通過攀爬作用域鏈解決(從頂部到底部)。這也就是說
在最內層函數(執行棧頂部的執行上下文)中,具有相同變量名稱的變量將具有較高優先級。

(2)簡單的說,每次試圖訪問函數執行上下文中的變量時,查找進程總是從自己的變量對象開始。如果在自己的變量對象中沒發現要查找的變量,繼續搜索作用域鏈。他將攀爬作用域鏈檢查每一個執行上下文的變量對象,去尋找和變量名稱匹配的值。

閱讀更多

我的博客即將搬運同步至騰訊云+社區,邀請大家一同入駐:https://cloud.tencent.com/dev...

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/95008.html

相關文章

  • 理解JavaScript中的作用作用

    摘要:示例當一個函數創建后,它的作用域鏈會被創建此函數的作用域中可訪問的數據對象填充。每一個運行期上下文都和一個作用域鏈關聯。此時,作用域鏈中函數的所有局部變量所在的作用域對象會被推后,訪問代價變高了。 作用域 作用域就是變量與函數的可訪問范圍,即作用域控制著變量與函數的可見性和生命周期。在JavaScript中,變量的作用域有全局作用域和局部作用域兩種。 作用域鏈 函數對象有一個內部屬性[...

    XanaHopper 評論0 收藏0
  • 深入理解JavaScript作用作用

    前言 JavaScript中有一個被稱為作用域(Scope)的特性。雖然對于許多新手開發者來說,作用域的概念并不是很容易理解,本文我會盡我所能用最簡單的方式來解釋作用域和作用域鏈,希望大家有所收獲! 想閱讀更多優質文章請猛戳GitHub博客 作用域(Scope) 1.什么是作用域 作用域是在運行時代碼中的某些特定部分中變量,函數和對象的可訪問性。換句話說,作用域決定了代碼區塊中變量和其他資源的可見...

    baiy 評論0 收藏0
  • 深入理解JavaScript作用作用

    前言 JavaScript中有一個被稱為作用域(Scope)的特性。雖然對于許多新手開發者來說,作用域的概念并不是很容易理解,本文我會盡我所能用最簡單的方式來解釋作用域和作用域鏈,希望大家有所收獲! 想閱讀更多優質文章請猛戳GitHub博客 作用域(Scope) 1.什么是作用域 作用域是在運行時代碼中的某些特定部分中變量,函數和對象的可訪問性。換句話說,作用域決定了代碼區塊中變量和其他資源的可見...

    ytwman 評論0 收藏0
  • 【進階2-3期】JavaScript深入之閉包面試題解

    摘要:閉包面試題解由于作用域鏈機制的影響,閉包只能取得內部函數的最后一個值,這引起的一個副作用就是如果內部函數在一個循環中,那么變量的值始終為最后一個值。 (關注福利,關注本公眾號回復[資料]領取優質前端視頻,包括Vue、React、Node源碼和實戰、面試指導) 本周正式開始前端進階的第二期,本周的主題是作用域閉包,今天是第8天。 本計劃一共28期,每期重點攻克一個面試重難點,如果你還不了...

    alanoddsoff 評論0 收藏0
  • javascript系列--javascript深入理解--作用作用鏈,閉包的面試題解

    摘要:一概要作用域和作用域鏈是中非常重要的特性,關系到理解整個體系,閉包是對作用域的延伸,其他語言也有閉包的特性。作用域鏈的作用他保證了變量對象的有序訪問。 一、概要 作用域和作用域鏈是js中非常重要的特性,關系到理解整個js體系,閉包是對作用域的延伸,其他語言也有閉包的特性。 那什么是作用域?作用域指的是一個變量和函數的作用范圍。 1、js中函數內聲明的所有變量在函數體內始終是可見的; 2...

    anRui 評論0 收藏0

發表評論

0條評論

Coding01

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<