深刻理解JavaScript:作用域的基本概念

前言


最近我打算寫一系列文章來介紹JS中的一些難點(diǎn),希望能幫助其他不太理解的人從初學(xué)者到達(dá)深刻理解的地步。
文章內(nèi)容主要來自于我自己的理解、我看過的書籍以及網(wǎng)上的一些信息等等,保證內(nèi)容全面、干貨夠多。雖然我之前從未寫過任何技術(shù)博客(沒錯,你現(xiàn)在看到的就是我的第一篇),但我的目標(biāo)是打造出內(nèi)容最好的博客,讓人們在搜索相關(guān)的技術(shù)名詞時只要看完我的博客就徹底的理解了。
通篇可能比較長,因為我必須徹底講清楚每個點(diǎn),既保證通俗易懂又保證擁有足夠的深度,所以我打算把每一個知識點(diǎn)都拆成很多小的篇幅發(fā)布出去,希望能看到這篇的有緣人能持續(xù)的關(guān)注我,謝謝各位了~

下面開始介紹我這個系列的第一篇: 作用域

作用域

基本概念

作用域(scope),程序設(shè)計概念,通常來說,一段程序代碼中所用到的名字并不總是有效/可用的,而限定這個名字的可用性的代碼范圍就是這個名字的作用域。

簡而言之就是指“一段程序代碼中所用到的名字”能夠在怎樣的范圍內(nèi)起作用(這里的“名字”就是我們常說的變量

我的理解

講人話:世界、房子、人

人們常說程序員可以創(chuàng)造世界,這是真的,我們現(xiàn)在隨便寫一段程序,這段程序就是一個世界,我們還能在這個世界里創(chuàng)造各種各樣的人。
你能懂我的意思嗎?是的,我說的“世界”實際上就是指全局作用域,“人”其實就是指該作用域下的各種變量。我們是這個世界的主宰,我們叫了誰的名字,誰就要為我們所用,這就是調(diào)用作用域中的變量。
現(xiàn)在世界只有一個,暫時還談不上范圍什么的,不過現(xiàn)在我們創(chuàng)造了一個叫“函數(shù)A”的人,他擁有類似我們的能力,可以造出一個房子,還可以在他的房子里造出許多的人。另外我們可能還創(chuàng)造了叫“函數(shù)B”的人,他也造了個房子,而且他房子里面還造了個叫“函數(shù)BB”的人,而這個“函數(shù)BB”又造了新的房子……

emmmmmm,看到這里萌新程序員可能覺得美滋滋的,這也太簡單了,但老練的程序員可能已經(jīng)想打人啦,簡單點(diǎn) 說話的方式簡單點(diǎn)!好,那我們現(xiàn)在不講人話了,開始談代碼

看代碼:全局作用域、函數(shù)作用域、變量

var a = 1
var b = 1
function A() {
  var aa = 1
  var a = 2  // 屏蔽了外部的a
}
function B() {
  // 可以調(diào)用a,b但無法調(diào)用aa,c
  function BB() {
    var c = 2
  }
}

總結(jié)

  • 全局作用域(世界),最初始的一個作用域,內(nèi)部可以定義函數(shù)作用域(房子)
  • 函數(shù)作用域,可以定義在全局作用域,也可以嵌套定義在其他函數(shù)作用域(房子里面可以造房子)
  • 外部的作用域無法了解內(nèi)部的作用域(在房子外面看不到房子里的人)
  • 但內(nèi)部作用域可以訪問外部作用域(房子的主人可以開門出去,出去之后如果外面還有房子他還可以繼續(xù)從內(nèi)部打開門再次出去)
  • 作用域中嘗試查找某個變量時先從當(dāng)前作用域開始找(想找人時肯定先原地喊一聲)

只要清楚的理解了前面的概念,我們就可以自由發(fā)揮推理出更多的信息。例如

  • 內(nèi)部作用域的變量會屏蔽外部作用域的變量(找人時先原地喊,如果同一房子的人已經(jīng)對你的呼喊做出了回應(yīng),雖然你擁有出門去找的能力,但這已經(jīng)不必要了)
  • 兩個獨(dú)立的函數(shù)無法訪問對方的作用域(任一房子里的人除了開門去到外層的房子外,無法再進(jìn)入其他房子,相當(dāng)于你能出門走到別人的門口,但是你不可能進(jìn)去)
  • 全局作用域無法訪問某個函數(shù)作用域內(nèi)部的函數(shù)作用域(連第一道門都進(jìn)不去又談何第二道門呢)

等等~

未完待續(xù)

本篇是該系列的第一篇,只是簡單的講解了作用域最最基本的概念,在之后的日子我會持續(xù)更新,盡快為打架奉上第二篇:作用域是如何產(chǎn)生的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容