最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談JavaScript for循環(huán) 閉包

 更新時間:2016年06月22日 08:53:35   投稿:jingxian  
下面小編就為大家?guī)硪黄獪\談JavaScript for循環(huán) 閉包。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

有個網(wǎng)友問了個問題,如下的html,為什么每次輸出都是5,而不是點擊每個p,就alert出對應(yīng)的1,2,3,4,5。

<html >   
<head>   
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />   
<title>閉包演示</title>   
<script type="text/javascript">   
  
function init() {   
  var pAry = document.getElementsByTagName("p");   
  for( var i=0; i<pAry.length; i++ ) {   
     pAry[i].onclick = function() {   
     alert(i);   
  }   
 }   
}   
</script>   
</head>   
<body onload="init();">   
<p>產(chǎn)品一</p>   
<p>產(chǎn)品二</p>   
<p>產(chǎn)品三</p>   
<p>產(chǎn)品四</p>   
<p>產(chǎn)品五</p>   
</body>   
</html>  

解決方式有以下幾種

1、將變量 i 保存給在每個段落對象(p)上

function init() {   
 var pAry = document.getElementsByTagName("p");   
 for( var i=0; i<pAry.length; i++ ) {   
   pAry[i].i = i;   
   pAry[i].onclick = function() {   
    alert(this.i);   
   }   
 }   
}   

2、將變量 i 保存在匿名函數(shù)自身

function init2() {   
 var pAry = document.getElementsByTagName("p");   
 for( var i=0; i<pAry.length; i++ ) {    
  (pAry[i].onclick = function() {   
    alert(arguments.callee.i);   
  }).i = i;   
 }   
} 

3、加一層閉包,i以函數(shù)參數(shù)形式傳遞給內(nèi)層函數(shù)

function init3() {   
 var pAry = document.getElementsByTagName("p");   
 for( var i=0; i<pAry.length; i++ ) {   
  (function(arg){     
    pAry[i].onclick = function() {     
     alert(arg);   
    };   
  })(i);//調(diào)用時參數(shù)   
 }   
}   

4、加一層閉包,i以局部變量形式傳遞給內(nèi)存函數(shù)

function init4() {   
 var pAry = document.getElementsByTagName("p");   
 for( var i=0; i<pAry.length; i++ ) {    
  (function () {   
   var temp = i;//調(diào)用時局部變量   
   pAry[i].onclick = function() {    
    alert(temp);    
   }   
  })();   
 }   
}   

5、加一層閉包,返回一個函數(shù)作為響應(yīng)事件(注意與3的細(xì)微區(qū)別)

function init5() {   
 var pAry = document.getElementsByTagName("p");   
 for( var i=0; i<pAry.length; i++ ) {    
  pAry[i].onclick = function(arg) {   
    return function() {//返回一個函數(shù)   
    alert(arg);   
   }   
  }(i);   
 }   
}  

6、用Function實現(xiàn),實際上每產(chǎn)生一個函數(shù)實例就會產(chǎn)生一個閉包

function init6() {   
  var pAry = document.getElementsByTagName("p");   
  for( var i=0; i<pAry.length; i++ ) {    
   pAry[i].onclick = new Function("alert(" + i + ");");//new一次就產(chǎn)生一個函數(shù)實例  
  }   
}  

7、用Function實現(xiàn),注意與6的區(qū)別

function init7() {   
  var pAry = document.getElementsByTagName("p");   
  for( var i=0; i<pAry.length; i++ ) {   
     pAry[i].onclick = Function('alert('+i+')')  
  }   
}  

以上就是小編為大家?guī)淼臏\談JavaScript for循環(huán) 閉包全部內(nèi)容了,希望大家多多支持腳本之家~

相關(guān)文章

  • AjaxUpLoad.js實現(xiàn)文件上傳功能

    AjaxUpLoad.js實現(xiàn)文件上傳功能

    這篇文章主要為大家詳細(xì)介紹了AjaxUpLoad.js實現(xiàn)文件上傳功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • JavaScript中對于SPA單頁面的理解

    JavaScript中對于SPA單頁面的理解

    這篇文章主要介紹了JavaScript中對于SPA單頁面的理解,單頁應(yīng)用SPA是一種網(wǎng)絡(luò)應(yīng)用程序或網(wǎng)站的模型,它通過動態(tài)重寫當(dāng)前頁面來與用戶交互
    2023-02-02
  • 深入理解JS繼承和原型鏈的問題

    深入理解JS繼承和原型鏈的問題

    js原型鏈與繼承是js中的重點,原型的實現(xiàn)則是在原型鏈的基礎(chǔ)上,本篇文章深入理解JS繼承和原型鏈的問題,有興趣的同學(xué)可以了解一下。
    2016-12-12
  • JavaScript控制table某列不顯示的方法

    JavaScript控制table某列不顯示的方法

    這篇文章主要介紹了JavaScript控制table某列不顯示的方法,涉及javascript操作表單的技巧,非常具有實用價值,需要的朋友可以參考下
    2015-03-03
  • 解決Layui數(shù)據(jù)表格顯示無數(shù)據(jù)提示的問題

    解決Layui數(shù)據(jù)表格顯示無數(shù)據(jù)提示的問題

    今天小編就為大家分享一篇解決Layui數(shù)據(jù)表格顯示無數(shù)據(jù)提示的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • 小程序?qū)崿F(xiàn)頁面多級來回切換的示例代碼

    小程序?qū)崿F(xiàn)頁面多級來回切換的示例代碼

    這篇文章主要為大家詳細(xì)介紹了小程序如何頁面多級來回切換支持滑動和點擊操作,文中的實現(xiàn)步驟講解詳細(xì),快跟隨小編一起動手嘗試一下吧
    2022-07-07
  • 獲取網(wǎng)站跟路徑的javascript代碼(站點及虛擬目錄)

    獲取網(wǎng)站跟路徑的javascript代碼(站點及虛擬目錄)

    js獲取網(wǎng)站根路徑(站點及虛擬目錄) ,需要的朋友可以參考下。
    2009-10-10
  • JavaScript對象創(chuàng)建模式實例匯總

    JavaScript對象創(chuàng)建模式實例匯總

    這篇文章主要介紹了JavaScript對象創(chuàng)建模式,結(jié)合實例形式總結(jié)分析了JavaScript常見的對象創(chuàng)建模式,包括工廠模式、構(gòu)造函數(shù)模式、原型模式、動態(tài)原型模式、寄生構(gòu)造函數(shù)模式、穩(wěn)妥構(gòu)造函數(shù)模式等,需要的朋友可以參考下
    2016-10-10
  • JavaScript中防抖和節(jié)流的實戰(zhàn)應(yīng)用記錄

    JavaScript中防抖和節(jié)流的實戰(zhàn)應(yīng)用記錄

    防抖與節(jié)流都是用來限制用戶頻發(fā)觸發(fā)事件的機制,下面這篇文章主要給大家介紹了關(guān)于JavaScript中防抖和節(jié)流的實戰(zhàn)應(yīng)用,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • js插件實現(xiàn)圖片滑動驗證碼

    js插件實現(xiàn)圖片滑動驗證碼

    這篇文章主要為大家詳細(xì)介紹了js插件實現(xiàn)圖片滑動驗證碼,滑動模塊,實現(xiàn)驗證功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10

最新評論

仁怀市| 霍山县| 自贡市| 忻州市| 梓潼县| 玉龙| 黄浦区| 开封市| 武冈市| 婺源县| 广灵县| 长宁区| 湖口县| 耒阳市| 宁夏| 若羌县| 乌兰察布市| 红河县| 仙桃市| 虞城县| 漳平市| 安义县| 和龙市| 铁岭县| 佛学| 松桃| 渭南市| 胶南市| 霍山县| 尼玛县| 资源县| 聂拉木县| 尤溪县| 方山县| 西藏| 安岳县| 舒兰市| 章丘市| 大冶市| 渝北区| 襄汾县|