JavaScript闭包
Posted ldxsuanfa
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript闭包相关的知识,希望对你有一定的参考价值。
例如以下的html,为什么每次输出都是5,而不是点击每一个p。就alert出相应的1,2,3。4。5
2、将变量 i 保存在匿名函数自身?
<span style="font-family:Microsoft YaHei;"><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>产品一</p>
<p>产品二</p>
<p>产品三</p>
<p>产品四</p>
<p>产品五</p>
</body>
</html> </span>
解决方案有两种。
1、将变量 i 保存给在每一个段落对象(p)上
<span style="font-family:Microsoft YaHei;"> 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);
}
}
} </span>
2、将变量 i 保存在匿名函数自身?
<span style="font-family:Microsoft YaHei;"> 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;
}
} </span>
以上是关于JavaScript闭包的主要内容,如果未能解决你的问题,请参考以下文章