JavaScript 闭包实现点段落输出段落次序号

这是一道网上的题目,对于刚学习javaScript的我有点混乱。

题目:什么是闭包?以下代码点击<p> 会输出什么?为什么?能大概说明白的话继续问能想出几种解决办法。

<!DOCTYPE HTML> 
<html> 
<head> 
<meta charset="utf-8" /> 
<title>闭包演示</title> 
<style type="text/css">
     	p {background:gold;}
</style>
 <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 οnlοad="init();">
   <p>产品 0</p>
   <p>产品 1</p>
   <p>产品 2</p>
   <p>产品 3</p>
   <p>产品 4</p>
   </body>
   </html>  

要知道,onclick后面函数的代码要等到你点击对应段落的时候才会执行,而到那个时候i的值等于5.所以你点击每个段落都是提示5。

解决办法使用闭包:

pAry[i].onclick = (function (msg){
	function show(){
		alert(msg);
	}
	return show;
})(i);

这样就将每一行的序号绑定到对应的显示函数上面了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值