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

資訊專(zhuān)欄INFORMATION COLUMN

JavaScript-作用域、塊級(jí)作用域、上下文、執(zhí)行上下文、作用域鏈

Coding01 / 3565人閱讀

摘要:一旦函數(shù)執(zhí)行完成,其就會(huì)從作用域鏈頂部移除,并且執(zhí)行權(quán)會(huì)返回到函數(shù)。攀爬作用域鏈當(dāng)不同執(zhí)行上下文之間存在變量命名沖突,可以通過(guò)攀爬作用域鏈解決從頂部到底部。

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

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

(2)實(shí)際上,JavaScript默認(rèn)有一個(gè)全局對(duì)象window,全局作用域的變量實(shí)際上被綁定到window的一個(gè)屬性

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

2.2 局部作用域(Local Scope)

(1)JavaScript的作用域是通過(guò)函數(shù)來(lái)定義的,在一個(gè)函數(shù)中定義的變量只對(duì)這個(gè)函數(shù)內(nèi)部可見(jiàn),稱(chēng)為函數(shù)(局部)作用域

三、全局/局部變量
變量能夠被定義在局部或者全局作用域,這導(dǎo)致運(yùn)行時(shí)變量的訪問(wèn)來(lái)自不同的作用域
3.1 全局變量

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

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

(3)如果變量在函數(shù)內(nèi)沒(méi)有聲明(沒(méi)有使用 var 關(guān)鍵字),該變量為全局變量。

3.2 局部變量

(1)在函數(shù)定義內(nèi)聲明的變量是局部變量。

(2)因?yàn)榫植孔兞恐蛔饔糜诤瘮?shù)內(nèi),所以不同的函數(shù)可以使用相同名稱(chēng)的變量

(3)每當(dāng)執(zhí)行函數(shù)時(shí),都會(huì)創(chuàng)建銷(xiāo)毀該變量,且無(wú)法通過(guò)函數(shù)之外的任何代碼訪問(wèn)該變量。

(4)函數(shù)外無(wú)法訪問(wèn)函數(shù)內(nèi)的變量,函數(shù)內(nèi)卻可以訪問(wèn)函數(shù)外的變量。

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

2、如果變量在函數(shù)內(nèi)沒(méi)有聲明(沒(méi)有使用 var 關(guān)鍵字),該變量為全局變量。

五、局部變量
1、因?yàn)榫植孔兞恐蛔饔糜诤瘮?shù)內(nèi),所以不同的函數(shù)可以使用相同名稱(chēng)的變量

2、每當(dāng)執(zhí)行函數(shù)時(shí),都會(huì)創(chuàng)建銷(xiāo)毀該變量,且無(wú)法通過(guò)函數(shù)之外的任何代碼訪問(wèn)該變量。

3、函數(shù)外無(wú)法訪問(wèn)函數(shù)內(nèi)的變量,函數(shù)內(nèi)卻可以訪問(wèn)函數(shù)外的變量。

六、塊級(jí)作用域 6.1 概念
塊級(jí)作用域指在If語(yǔ)句,switch語(yǔ)句,循環(huán)語(yǔ)句等語(yǔ)句塊中定義變量,這意味著變量不能在語(yǔ)句塊之外被訪問(wèn)
6.2 var 不支持塊級(jí)作用域

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

6.3 let和const

(1)為了解決塊級(jí)作用域,ES6引入了 letconst 關(guān)鍵字,可以聲明一個(gè)塊級(jí)作用域的變量

(2)全局作用域的生存周期與上述應(yīng)用相同。局部作用域只在該函數(shù)調(diào)用執(zhí)行期間存在。

七、上下文 vs 作用域

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

(2)每個(gè)函數(shù)調(diào)用都有與之相關(guān)的作用域和上下文。從根本上說(shuō),作用域是基于函數(shù),而上下文是基于對(duì)象

(3)作用域是和每次函數(shù)調(diào)用時(shí)變量的訪問(wèn)有關(guān),并且每次調(diào)用都是獨(dú)立的。上下文總是關(guān)鍵字 this 的值,是調(diào)用當(dāng)前可執(zhí)行代碼的對(duì)象的引用。

八、“this” 上下文

(1)上下文通常是取決于一個(gè)函數(shù)如何被調(diào)用。當(dāng)函數(shù)作為對(duì)象的方法被調(diào)用時(shí),this 指向調(diào)用方法的對(duì)象

(2)當(dāng)調(diào)用一個(gè)函數(shù)時(shí),通過(guò) new 操作符創(chuàng)建一個(gè)對(duì)象的實(shí)例,當(dāng)以這種方式調(diào)用時(shí),this 指向新創(chuàng)建的實(shí)例

(3)當(dāng)調(diào)用一個(gè)未綁定函數(shù),this 默認(rèn)指向全局上下文或者瀏覽器中的window對(duì)象。然而如果函數(shù)在嚴(yán)格模式下被執(zhí)行(“use strict”),this 默認(rèn)指向 undefined

九、執(zhí)行上下文

(1)當(dāng)函數(shù)執(zhí)行時(shí),會(huì)創(chuàng)建一個(gè)稱(chēng)為執(zhí)行上下文的內(nèi)部對(duì)象(可理解為作用域,不是前面討論的上下文)。一個(gè)執(zhí)行上下文定義了一個(gè)函數(shù)執(zhí)行時(shí)的環(huán)境

(2)函數(shù)每次執(zhí)行時(shí)對(duì)應(yīng)的執(zhí)行上下文都是獨(dú)一無(wú)二的,所以多次調(diào)用一個(gè)函數(shù)會(huì)導(dǎo)致創(chuàng)建多個(gè)執(zhí)行上下文。

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

十、作用域鏈

(1)在JavaScript中,函數(shù)也是對(duì)象,對(duì)象中有些屬性我們可以訪問(wèn),但有些不可以(訪問(wèn)),這些屬性?xún)H供JavaScript引擎存取,[[scope]]就是其中一個(gè)。

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

(3)[[scope]]中所存儲(chǔ)的執(zhí)行上下文對(duì)象的集合,這個(gè)集合呈鏈?zhǔn)芥溄?/strong>,我們把這種鏈?zhǔn)芥溄咏凶鲎饔糜蜴湣?/p> 10.1 示例

(1)運(yùn)行示例代碼將會(huì)導(dǎo)致嵌套的函數(shù)被從上倒下執(zhí)行,一直到 fourth 函數(shù),此時(shí)作用域鏈從上到下為: fourth, third, second, first, global。

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

(3)一旦fourth函數(shù)執(zhí)行完成,其就會(huì)從作用域鏈頂部移除,并且執(zhí)行權(quán)會(huì)返回到third函數(shù)。這個(gè)過(guò)程一直持續(xù)到所有代碼完成執(zhí)行。

10.2 攀爬作用域鏈

(1)當(dāng)不同執(zhí)行上下文之間存在 變量命名沖突,可以通過(guò)攀爬作用域鏈解決(從頂部到底部)。這也就是說(shuō)
在最內(nèi)層函數(shù)(執(zhí)行棧頂部的執(zhí)行上下文)中,具有相同變量名稱(chēng)的變量將具有較高優(yōu)先級(jí)。

(2)簡(jiǎn)單的說(shuō),每次試圖訪問(wèn)函數(shù)執(zhí)行上下文中的變量時(shí),查找進(jìn)程總是從自己的變量對(duì)象開(kāi)始。如果在自己的變量對(duì)象中沒(méi)發(fā)現(xiàn)要查找的變量,繼續(xù)搜索作用域鏈。他將攀爬作用域鏈檢查每一個(gè)執(zhí)行上下文的變量對(duì)象,去尋找和變量名稱(chēng)匹配的值

閱讀更多

我的博客即將搬運(yùn)同步至騰訊云+社區(qū),邀請(qǐng)大家一同入駐:https://cloud.tencent.com/dev...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/95008.html

相關(guān)文章

  • 理解JavaScript中的作用作用

    摘要:示例當(dāng)一個(gè)函數(shù)創(chuàng)建后,它的作用域鏈會(huì)被創(chuàng)建此函數(shù)的作用域中可訪問(wèn)的數(shù)據(jù)對(duì)象填充。每一個(gè)運(yùn)行期上下文都和一個(gè)作用域鏈關(guān)聯(lián)。此時(shí),作用域鏈中函數(shù)的所有局部變量所在的作用域?qū)ο髸?huì)被推后,訪問(wèn)代價(jià)變高了。 作用域 作用域就是變量與函數(shù)的可訪問(wèn)范圍,即作用域控制著變量與函數(shù)的可見(jiàn)性和生命周期。在JavaScript中,變量的作用域有全局作用域和局部作用域兩種。 作用域鏈 函數(shù)對(duì)象有一個(gè)內(nèi)部屬性[...

    XanaHopper 評(píng)論0 收藏0
  • 深入理解JavaScript作用作用

    前言 JavaScript中有一個(gè)被稱(chēng)為作用域(Scope)的特性。雖然對(duì)于許多新手開(kāi)發(fā)者來(lái)說(shuō),作用域的概念并不是很容易理解,本文我會(huì)盡我所能用最簡(jiǎn)單的方式來(lái)解釋作用域和作用域鏈,希望大家有所收獲! 想閱讀更多優(yōu)質(zhì)文章請(qǐng)猛戳GitHub博客 作用域(Scope) 1.什么是作用域 作用域是在運(yùn)行時(shí)代碼中的某些特定部分中變量,函數(shù)和對(duì)象的可訪問(wèn)性。換句話說(shuō),作用域決定了代碼區(qū)塊中變量和其他資源的可見(jiàn)...

    baiy 評(píng)論0 收藏0
  • 深入理解JavaScript作用作用

    前言 JavaScript中有一個(gè)被稱(chēng)為作用域(Scope)的特性。雖然對(duì)于許多新手開(kāi)發(fā)者來(lái)說(shuō),作用域的概念并不是很容易理解,本文我會(huì)盡我所能用最簡(jiǎn)單的方式來(lái)解釋作用域和作用域鏈,希望大家有所收獲! 想閱讀更多優(yōu)質(zhì)文章請(qǐng)猛戳GitHub博客 作用域(Scope) 1.什么是作用域 作用域是在運(yùn)行時(shí)代碼中的某些特定部分中變量,函數(shù)和對(duì)象的可訪問(wèn)性。換句話說(shuō),作用域決定了代碼區(qū)塊中變量和其他資源的可見(jiàn)...

    ytwman 評(píng)論0 收藏0
  • 【進(jìn)階2-3期】JavaScript深入之閉包面試題解

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

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

    摘要:一概要作用域和作用域鏈?zhǔn)侵蟹浅V匾奶匦裕P(guān)系到理解整個(gè)體系,閉包是對(duì)作用域的延伸,其他語(yǔ)言也有閉包的特性。作用域鏈的作用他保證了變量對(duì)象的有序訪問(wèn)。 一、概要 作用域和作用域鏈?zhǔn)莏s中非常重要的特性,關(guān)系到理解整個(gè)js體系,閉包是對(duì)作用域的延伸,其他語(yǔ)言也有閉包的特性。 那什么是作用域?作用域指的是一個(gè)變量和函數(shù)的作用范圍。 1、js中函數(shù)內(nèi)聲明的所有變量在函數(shù)體內(nèi)始終是可見(jiàn)的; 2...

    anRui 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<