資源描述:
《javascript中的作用域和閉包詳解_javascript技巧》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、javascript中的作用域和閉包詳解一、JavaScript作用域JavaScript變量實(shí)際上只有兩種作用域,全局變量和函數(shù)的內(nèi)部變量。在函數(shù)內(nèi)部任何一個(gè)地方定義的變量(varscope)其作用域都是整個(gè)函數(shù)體。全局變量:指的是window對(duì)象卜?的對(duì)象屬性。作用域劃分:基于上下文,以函數(shù)進(jìn)行劃分的,而不是由塊劃分的。強(qiáng)調(diào)兩點(diǎn):1.在同一作用域屮,JavaScript是允許變量的重復(fù)定義,并且后一個(gè)定義將覆蓋詢一個(gè)定義。2.函數(shù)內(nèi)部如杲不加關(guān)鍵字vh而定義的變量,默認(rèn)為全局變量。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ù)當(dāng)中沒有定義變量scope,T是查找上層作用域(全局作用域),進(jìn)而進(jìn)行輸出其值。但是在第二段代碼的函數(shù)內(nèi)定義了變量scope(無論是在consoleZ后述是Z前定義變量,都認(rèn)為在此作用域擁有變量scope),于是不再向上層的作用域進(jìn)行查找,直接輸出scopeo但是不幸的是此時(shí)的局部變量i并沒右賦值,所以輸出的是undefinedo〃所以根據(jù)函數(shù)作用域的意思,口J以將上述第二段代碼重寫如下:varscope二"glob
4、al";functiont(){varscope;console,log(scope);scope二〃local〃consolc.log(scope);}10;由于函數(shù)作用域的特性,局部變量在整個(gè)函數(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當(dāng)使用var聲明一個(gè)變量時(shí),創(chuàng)建的這個(gè)屬性是不可配置的,也就是說無法通過delete運(yùn)算符刪除。二、作用域?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;
id=,,button2,,>Button2id=,zbutton3,z>Button3