关于闭包面试题求解答
本帖最后由 wcpaxx 于 2013-02-22 17:09:57 编辑
<!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 onload="init();">
<p>产品 0</p>
<p>产品 1</p>
<p>产品 2</p>
<p>产品 3</p>
<p>产品 4</p>
</body>
</html>
希望点对应的p显示对应的号,
当前都是显示都是5 求解决方法
------解决方案--------------------
请看下面一段代码,更容易理解
function init() {
var pAry = document.getElementsByTagName("p");
var delegate = function(x){
return function(){alert(x)}
}
for( var i=0; i<pAry.length; i++ ) {
pAry[i].onclick = delegate(i)
}
pAry = delegate = null
//把delegate 和 for连到一起就是上面的代码,建议使用这种方式,上面的代码有循环引用的嫌疑
}