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