日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
淺析Javascript閉包的特性

Javascript閉包的定義非?;逎]包,是指語(yǔ)法域位于某個(gè)特定的區(qū)域,具有持續(xù)參照(讀寫)位于該區(qū)域內(nèi)自身范圍之外的執(zhí)行域上的非持久型變量值能力的段落。這些外部執(zhí)行域的非持久型變量神奇地保留它們?cè)陂]包最初定義(或創(chuàng)建)時(shí)的值(深連結(jié))。

簡(jiǎn)單來說,Javascript閉包就是在另一個(gè)作用域中保存了一份它從上一級(jí)函數(shù)或作用域取得的變量(鍵值對(duì)),而這些鍵值對(duì)是不會(huì)隨上一級(jí)函數(shù)的執(zhí)行完成而銷毀。周愛民說得更清楚,閉包就是“屬性表”,閉包就是一個(gè)數(shù)據(jù)塊,閉包就是一個(gè)存放著“Name=Value”的對(duì)照表。就這么簡(jiǎn)單。但是,必須強(qiáng)調(diào),閉包是運(yùn)行期概念,一個(gè)函數(shù)實(shí)例。

Javascript閉包的實(shí)現(xiàn),通常是在函數(shù)內(nèi)部再定義函數(shù),讓該內(nèi)部函數(shù)使用上一級(jí)函數(shù)的變量或全局變量。

ECMAScript認(rèn)為使用全局變量是一個(gè)簡(jiǎn)單的Javascript閉包實(shí)例。

 
 
 
  1. var sMessage = "Hello World";   
  2. function sayHelloWorld(){   
  3. alert(sMessage);   
  4. };   
  5. sayHelloWorld(); 

但它完成沒有體現(xiàn)Javascript閉包的特性……

現(xiàn)在比較讓人認(rèn)同的Javascript閉包實(shí)現(xiàn)有如下三種

 
 
 
  1. with(obj){   
  2. //這里是對(duì)象閉包   
  3. }(function(){      
  4. //函數(shù)閉包   
  5. })()try{   
  6. //...   
  7. catch(e) {   
  8. //catch閉包 但I(xiàn)E里不行   

附上今天在無憂看到的問題:

要求:

讓這三個(gè)節(jié)點(diǎn)的Onclick事件都能正確的彈出相應(yīng)的參數(shù)。

 
 
 
    •     
    •  id="a1">aa
    •     
    •  id="a2">aa
    •    
    •  id="a3">aa
    •    
       
  1.  

客服果果的解答:

 
 
 
  1. for(var i=1; i < 4; i++){      
  2. var id = document.getElementById("a" + i);     
  3. /*     
  4. 這里生成了一個(gè)匿名函數(shù)并賦值給對(duì)象 id_i;     
  5. */     
  6. id.onclick = function(){          
  7. /*          
  8. 這個(gè)i來源于局部變量,無法以window.i或者obj.i的形式在后期引用,          
  9. 只好以指針或者變量地址方式保存在這個(gè)匿名函數(shù)中,          
  10. 這就是傳說的閉包,所以所有這個(gè)過程中生成的事件句柄都使用引用          
  11. 的方式來持久這個(gè)變量,也就是這些匿名函數(shù)共用一個(gè)變量i;          
  12. */         
  13. alert(i);      
  14. };   
  15. }; 

局部變?nèi)?/p>

 
 
 
  1. for(var i=1; i < 4; i++){   
  2. var id = document.getElementById("a" + i);     
  3. id.i=i;//這個(gè)i有了根     
  4. id.onclick=function(){          
  5. alert(this.i)      
  6. };   
  7. };1.for(var i=1; i < 4; i++){     
  8. var id = document.getElementById("a" + i);    
  9. window[id.id]=i;//這個(gè)i有了根    
  10. id.onclick=function(){         
  11. alert(window[this.id]);     
  12. };   

產(chǎn)生一對(duì)一的更多Javascript閉包

 
 
 
  1. for(var i=1; i < 4; i++){    
  2. var id = document.getElementById("a" + i);    
  3. id.onclick = new function(){        
  4. var i2=i;//這個(gè)i是閉包的閉包       
  5. return function(){           
  6. alert(i2);       
  7. }     
  8. };   

【編輯推薦】

  1. JavaScript類和繼承:prototype屬性
  2. JavaScript類和繼承:this屬性
  3. ExtJS Grid Tooltip的3+1種實(shí)現(xiàn)方式總結(jié)
  4. JavaScript異步調(diào)用框架的鏈?zhǔn)綄?shí)現(xiàn)
  5. JavaScript異步調(diào)用框架的jQuery風(fēng)格鏈?zhǔn)秸{(diào)用

網(wǎng)站題目:淺析Javascript閉包的特性
網(wǎng)頁(yè)路徑:http://www.dlmjj.cn/article/dpejdhh.html