下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、深入理解javascript作用域第二篇之詞法作用域和動態(tài)作用域這篇文章主要介紹了 javascript作用域第二篇之詞法 作用域和動態(tài)作用域的相關(guān)資料,非常不錯,具有參考借 鑒價值,感興趣的朋友可以參考下前面的話大多數(shù)時候,我們對作用域產(chǎn)生混亂的主要原因是分不清楚應(yīng)該按照函數(shù)位置的嵌套順序,還是按照函數(shù)的調(diào) 用順序進(jìn)行變量查找。再加上this機(jī)制的干擾,使得變量 查找極易出錯。這實(shí)際上是由兩種作用域工作模型導(dǎo)致的, 作用域分為詞法作用域和動態(tài)作用域,分清這兩種作用域 模型就能夠?qū)ψ兞坎檎疫^程有清晰的認(rèn)識。本文是深入理解j avascript作用域系列第二篇詞法作用域和動態(tài)作用域 詞法作用域第
2、一篇介紹過,編譯器的第一個工作階段叫作分詞,就是把由字符組成的字符串分解成詞法單元。這個概念是 理解詞法作用域的基礎(chǔ)簡單地說,詞法作用域就是定義在詞法階段的作用 域,是由寫代碼時將變量和塊作用域?qū)懺谀睦飦頉Q定的, 因此當(dāng)詞法分析器處理代碼時會保持作用域不變 關(guān)系無論函數(shù)在哪里被調(diào)用,也無論它如何被調(diào)用,它的 詞法作用域都只由函數(shù)被聲明時所處的位置決定 functio nfoo (a) var b=a*2;funct ion bar (c) c onsole. log (a, b, c);bar (b*3);foo(2);/2412在這個例子中有三個逐級嵌套的作用域。為了幫助理 解,可以將它們想
3、象成幾個逐級包含的氣泡作用域氣泡由其對應(yīng)的作用域塊代碼寫在哪里決定, 它們是逐級包含的氣泡1包含著整個全局作用域,其中只有一個標(biāo)識符: foo氣泡2包含著foo所創(chuàng)建的作用域,其中有三個標(biāo)識 符:a、bar 和 b氣泡3包含著bar所創(chuàng)建的作用域,其中只有一個標(biāo)識 符:c查找作用域氣泡的結(jié)構(gòu)和互相之間的位置關(guān)系給引擎提供了足夠的位置信息,引擎用這些信息來查找標(biāo)識符的位置在代碼片段中,引擎執(zhí)行console. log(.)聲明,并 查找a、b和c三個變量的引用。它首先從最內(nèi)部的作用域, 也就是ba r(.)函數(shù)的作用域開始查找。引擎無法在這里 找到a,因此會去上一級到所嵌套的foo()的作用域中
4、 繼續(xù)查找。在這里找到了 a,因此引擎使用了這個引用。對b來講也一樣。而對c來說,引擎在bar (.)中找到了它注意詞法作用域查找只會查找一級標(biāo)識符,如果代碼引用 了 foo. b ar. baz,詞法作用域查找只會試圖查找f00標(biāo)識符,找到這個變量后,對象屬性訪問規(guī)則分別接管對 bar和baz屬性的訪問 foo= baz: 1;console. log(foo. bar baz) ;/l遮蔽作用域查找從運(yùn)行時所處的最內(nèi)部作用域開始,逐級 向外或者說向上進(jìn)行,直到遇見第一個匹配的標(biāo)識符為止在多層的嵌套作用域中可以定義同名的標(biāo)識符,這叫 作“遮蔽效應(yīng)m內(nèi)部的標(biāo)識符“遮蔽” 了外部的標(biāo)識符 var
5、a=o;fun ctiontest () vara=l;con sole log(a) ;/ltest ();全局變量會自動為全局對象的屬性,因此可以不直接 通過全局對象的詞法名稱,而是間接地通過對全局對象屬 性的引用來對其進(jìn)行訪問vara =0;function test () vara =1;consol e. log(windo w. a) ;/0te st ();通過這種技術(shù)可以訪問那些被同名變量所遮蔽的全局 變量。但非全局的變量如果被遮蔽了,無論如何都無法被 訪問到動態(tài)作用域j avascript使用的是詞法作用域,它的最重要的特征 是它的定義過程發(fā)生在代碼的書寫階段那為什么要介紹動
6、態(tài)作用域呢?實(shí)際上動態(tài)作用域是 javascri pt另一個重要機(jī)制th is的表親。作用域混亂多 數(shù)是因?yàn)樵~法作用域和this機(jī)制相混淆,傻傻分不清楚動態(tài)作用域并不關(guān)心函數(shù)和作用域是如何聲明以及在 任何處聲明的,只關(guān)心它們從何處調(diào)用。換句話說,作用 域鏈?zhǔn)腔谡{(diào)用棧的,而不是代碼中的作用域嵌套 vara=2;func tionfooo c onsole. log (a);functio nbar() vara =3;foo(); b ar ();11如果處于詞法作用域,也就是現(xiàn)在的javascr ipt環(huán)境。變量a首先在foo()函數(shù)中查找,沒有找到。于 是順著作用域鏈到全局作用域中查找,找到并賦值為20所 以控制臺輸出2【2】如果處于動態(tài)作用域,同樣地,變量a首先在foo()中查找,沒有找到。這里會順著調(diào)用棧在調(diào)用foo()函數(shù)的地方,也就是bar ()函數(shù)中查找,找到并賦值為3。所以控制臺輸出3小結(jié):兩
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 自動日歷課程設(shè)計
- 二零二五年度環(huán)??萍脊狙邪l(fā)顧問聘用合同
- 二零二五年度加油站油品安全管理及應(yīng)急預(yù)案合同
- 2025年度智慧城市基礎(chǔ)設(shè)施資產(chǎn)轉(zhuǎn)讓協(xié)議書
- 二零二五年度豬場租賃與冷鏈物流服務(wù)合同
- 2025年度食品冷鏈裝卸工勞務(wù)合同
- 過路管施工方案
- 2025年度玻璃窗施工安全培訓(xùn)與應(yīng)急預(yù)案協(xié)議書
- 2025年度股權(quán)代持協(xié)議中的股東權(quán)利義務(wù)界定與保護(hù)
- 二零二五年度高空作業(yè)起重機(jī)全面檢修及安全認(rèn)證合同
- 旅游文本翻譯策略之轉(zhuǎn)換法-語態(tài)轉(zhuǎn)換
- 食品進(jìn)駐超市的談判計劃書
- 辦公區(qū)域巡檢與安全檢查規(guī)定
- 宮頸癌篩查及預(yù)防講課課件
- 《跟單信用證統(tǒng)一慣例》UCP600中英文對照版
- 2023年數(shù)學(xué)競賽AMC8試卷(含答案)
- SMA分子檢測進(jìn)展
- 醫(yī)師定期考核機(jī)構(gòu)信息登記表
- 風(fēng)力發(fā)電風(fēng)機(jī)拆除方案
- 杭州出租車區(qū)域考試復(fù)習(xí)備考題庫(含答案)
- 普通高中地理課程標(biāo)準(zhǔn)簡介課件
評論
0/150
提交評論