摘要:針對(duì)有經(jīng)驗(yàn)的開(kāi)發(fā)者,糾正一個(gè)過(guò)時(shí)的理解你可能聽(tīng)過(guò)這句話沒(méi)有塊級(jí)作用域。詳見(jiàn)而且,在不使用新語(yǔ)法的前提下,沒(méi)有塊級(jí)作用域的正確理解應(yīng)該是只有全局作用域和函數(shù)作用域。各自的作用域下,用各自的。
針對(duì)有經(jīng)驗(yàn)的開(kāi)發(fā)者,糾正一個(gè)過(guò)時(shí)的理解:你可能聽(tīng)過(guò)這句話“javascript沒(méi)有塊級(jí)作用域”。所謂“塊”,就是大括號(hào)“{}”中間的語(yǔ)句。誠(chéng)然,在ES6之前,這句話是完全正確的,但ES中新增的兩個(gè)命令let和const,改變了這種狀態(tài),使得js也有了塊級(jí)作用域的概念。詳見(jiàn):http://www.cnblogs.com/giggle...
而且,在不使用ES6新語(yǔ)法的前提下,“javascript沒(méi)有塊級(jí)作用域”的正確理解應(yīng)該是“javascript只有全局作用域和函數(shù)作用域”。
var a = 1; if(a) { var b = 2; } for (var c = 3; c < 10; c++) { //...... }
所以,上述代碼中的a、b、c皆是全局作用域中的全局變量。
作用域是一個(gè)很抽象的概念,類似于一個(gè)“地盤(pán)”:
如上圖,全局代碼和fn、bar兩個(gè)函數(shù)都會(huì)形成一個(gè)作用域。而且,作用域有上下級(jí)的關(guān)系,上下級(jí)關(guān)系的確定就看函數(shù)是在哪個(gè)作用域下創(chuàng)建的。例如,fn作用域下創(chuàng)建了bar函數(shù),那么“fn作用域”就是“bar作用域”的上級(jí)。
作用域最大的用處就是隔離變量,不同作用域下同名變量不會(huì)有沖突。例如以上代碼中,三個(gè)作用域下都聲明了“a”這個(gè)變量,但是他們不會(huì)有沖突。各自的作用域下,用各自的“a”。
與執(zhí)行上下文環(huán)境的關(guān)系:
作用域只是一個(gè)“地盤(pán)”,一個(gè)抽象的概念,代碼寫(xiě)完就已經(jīng)將其確定了,是一直存在的,其中沒(méi)有變量,要通過(guò)作用域?qū)?yīng)的執(zhí)行上下文環(huán)境來(lái)獲取變量的值。
執(zhí)行上下文環(huán)境類似于一個(gè)“對(duì)象”,代碼預(yù)處理完才會(huì)生成,存在被“創(chuàng)建”或被“銷毀”的概念,里邊存放聲明的變量。
同一個(gè)作用域下,不同的調(diào)用會(huì)產(chǎn)生不同的執(zhí)行上下文環(huán)境,繼而產(chǎn)生不同的變量的值。
如果要查找一個(gè)作用域下某個(gè)變量的值,就需要找到這個(gè)作用域?qū)?yīng)的執(zhí)行上下文環(huán)境,再在其中尋找變量的值。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/91725.html
摘要:使用上一篇文章的例子來(lái)說(shuō)明下自由變量進(jìn)階期深入淺出圖解作用域鏈和閉包訪問(wèn)外部的今天是今天是其中既不是參數(shù),也不是局部變量,所以是自由變量。 (關(guān)注福利,關(guān)注本公眾號(hào)回復(fù)[資料]領(lǐng)取優(yōu)質(zhì)前端視頻,包括Vue、React、Node源碼和實(shí)戰(zhàn)、面試指導(dǎo)) 本周正式開(kāi)始前端進(jìn)階的第二期,本周的主題是作用域閉包,今天是第7天。 本計(jì)劃一共28期,每期重點(diǎn)攻克一個(gè)面試重難點(diǎn),如果你還不了解本進(jìn)階計(jì)...
摘要:閉包面試題解由于作用域鏈機(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),如果你還不了...
摘要:作用域是門(mén)動(dòng)態(tài)語(yǔ)言,跟不一樣,可以隨意定義全局變量和局部變量,變量會(huì)在該作用域下提升,而且沒(méi)有塊級(jí)作用域。一預(yù)處理作用域解析的作用域只用兩種,一個(gè)是全局的,一個(gè)是函數(shù)的,也稱為全局作用域和局部作用域局部作用域可以訪問(wèn)全局作用域。 作用域 JavaScript是門(mén)動(dòng)態(tài)語(yǔ)言,跟Java不一樣,JavaScript可以隨意定義全局變量和局部變量,變量會(huì)在該作用域下提升,而且JavaScrip...
前言 JavaScript中有一個(gè)被稱為作用域(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)...
前言 JavaScript中有一個(gè)被稱為作用域(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)...
閱讀 3074·2021-11-19 09:40
閱讀 1559·2021-11-15 11:39
閱讀 662·2021-10-08 10:05
閱讀 2273·2021-09-03 10:29
閱讀 3406·2021-08-12 13:22
閱讀 2151·2019-08-30 15:54
閱讀 3706·2019-08-30 14:03
閱讀 2654·2019-08-30 13:45