中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

淺談JavaScript for循環(huán) 閉包
來(lái)源:易賢網(wǎng) 閱讀:972 次 日期:2016-07-12 16:27:04
溫馨提示:易賢網(wǎng)小編為您整理了“淺談JavaScript for循環(huán) 閉包”,方便廣大網(wǎng)友查閱!

下面小編就為大家?guī)?lái)一篇淺談JavaScript for循環(huán) 閉包。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。

有個(gè)網(wǎng)友問(wèn)了個(gè)問(wèn)題,如下的html,為什么每次輸出都是5,而不是點(diǎn)擊每個(gè)p,就alert出對(duì)應(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 保存給在每個(gè)段落對(duì)象(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í)參數(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)用時(shí)局部變量   

   pAry[i].onclick = function() {    

    alert(temp);    

   }   

  })();   

 }   

}   

5、加一層閉包,返回一個(gè)函數(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() {//返回一個(gè)函數(shù)   

    alert(arg);   

   }   

  }(i);   

 }   

}  

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

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)生一個(gè)函數(shù)實(shí)例  

  }   

}  

7、用Function實(shí)現(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ī)?lái)的淺談JavaScript for循環(huán) 閉包全部?jī)?nèi)容了

更多信息請(qǐng)查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機(jī)網(wǎng)站地址:淺談JavaScript for循環(huán) 閉包
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門(mén)公布的正式信息和咨詢?yōu)闇?zhǔn)!

2026國(guó)考·省考課程試聽(tīng)報(bào)名

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)
主站蜘蛛池模板: 凉城县| 黄石市| 西藏| 邢台县| 墨竹工卡县| 荣昌县| 高陵县| 罗田县| 米易县| 天镇县| 林周县| 大英县| 丹江口市| 商南县| 武平县| 阜南县| 扶绥县| 宁晋县| 德保县| 沙雅县| 瓦房店市| 北宁市| 合水县| 蓝田县| 宁乡县| 灌阳县| 修水县| 临洮县| 南城县| 保定市| 凤台县| 西安市| 时尚| 建水县| 泰兴市| 平定县| 奉贤区| 柯坪县| 安庆市| 临海市| 贵德县|