javascript中的作用域和閉包詳解_javascript技巧

javascript中的作用域和閉包詳解_javascript技巧

ID:30777776

大小:61.75 KB

頁數(shù):4頁

時間:2019-01-03

javascript中的作用域和閉包詳解_javascript技巧_第1頁
javascript中的作用域和閉包詳解_javascript技巧_第2頁
javascript中的作用域和閉包詳解_javascript技巧_第3頁
javascript中的作用域和閉包詳解_javascript技巧_第4頁
資源描述:

《javascript中的作用域和閉包詳解_javascript技巧》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。

1、javascript中的作用域和閉包詳解一、JavaScript作用域JavaScript變量實際上只有兩種作用域,全局變量和函數(shù)的內(nèi)部變量。在函數(shù)內(nèi)部任何一個地方定義的變量(varscope)其作用域都是整個函數(shù)體。全局變量:指的是window對象卜?的對象屬性。作用域劃分:基于上下文,以函數(shù)進行劃分的,而不是由塊劃分的。強調(diào)兩點:1.在同一作用域屮,JavaScript是允許變量的重復定義,并且后一個定義將覆蓋詢一個定義。2.函數(shù)內(nèi)部如杲不加關(guān)鍵字vh而定義的變量,默認為全局變量。varscope二〃

2、global";functiont(){console,log(scope);//"globalscope二"loceil"console.log(scope);//"local"}10;console,log(scope);//"local"varscope二〃global〃;functiont(){console.log(scope);//"undefineel"varscope二〃local"console,log(scope);//"local"}10;console.log(scope);//"

3、global"在變量解析過程中首先查找局部的作用域,然后查找上層作用域。在第一段代碼的函數(shù)當中沒有定義變量scope,T是查找上層作用域(全局作用域),進而進行輸出其值。但是在第二段代碼的函數(shù)內(nèi)定義了變量scope(無論是在consoleZ后述是Z前定義變量,都認為在此作用域擁有變量scope),于是不再向上層的作用域進行查找,直接輸出scopeo但是不幸的是此時的局部變量i并沒右賦值,所以輸出的是undefinedo〃所以根據(jù)函數(shù)作用域的意思,口J以將上述第二段代碼重寫如下:varscope二"glob

4、al";functiont(){varscope;console,log(scope);scope二〃local〃consolc.log(scope);}10;由于函數(shù)作用域的特性,局部變量在整個函數(shù)體始終是rti定義的,我們可以將變量聲明”提前“到函數(shù)體頂部。varb;//第1步functionfun(){b二,zchange〃;}alert(b);//輸出undefined,由于第1步只定義未賦值varb;//第1步functionfun(){b=z,changc";}fun();//調(diào)用上述函數(shù)al

5、ert(b);//輸出change當使用var聲明一個變量時,創(chuàng)建的這個屬性是不可配置的,也就是說無法通過delete運算符刪除。二、作用域?qū)嵗?html>functionbuttonlnit(){for(vari二1;i〈4;i++){varb=document.getElemenlByTd(z,button"+i);b.addEventListener("click",function(){alert("Button〃+i);},

6、false);}}window.onload=butlonIniI;Buttonlid=,,button2,,>Button2id=,zbutton3,z>Button3當注冊事件結(jié)束后,i的值為4,當點擊按鈕時,事件函數(shù)即functionO{alertCButton^+i);}這個匿名函數(shù)中沒有i,根據(jù)作用域鏈

7、,所以到buttonTnit函數(shù)中找,此時i的值為4,所以彈岀”buttond“。在jsm,閉包主要涉及到j(luò)s的幾個其他的特性:作用域鏈,垃圾(內(nèi)存)回收機制,函數(shù)嵌套,等等。1.作用域鏈:簡單來說,作用域鏈就是函數(shù)在定義的時候創(chuàng)建的,用于尋找使用到的變量的值的一個索引,而他內(nèi)部的規(guī)則是,把函數(shù)自身的本地變量放在最前面,把自身的父級函數(shù)中的變量放在其次,把再高一級函數(shù)中的變量放在更后而,以此類推直至全局對象為止。當函數(shù)小需要查詢一個變量的值的時候,js解釋器會去作用域鏈去查找,從最前面的本地變量屮先找,如

8、果沒有找到對應的變量,則到下一級的鏈上找,一旦找到了變量,則不再繼續(xù)。如果找到最后也沒找到需耍的變量,則解釋器返回undefinedo2.Javascript的垃圾冋收機制:在Javascript中,如果一個對象不再被引用,那么這個對象就會被GC回收。如果兩個對象互相引用,而不再被第3者所引用,那么這兩個互相引用的對象也會被回收。因為函數(shù)a被b引用,b乂被3外的c引用,這就是為什么函數(shù)a執(zhí)行后不會被冋收的原因。構(gòu)建一個閉包,這

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。