日期:2014-05-16  浏览次数:20340 次

关于闭包面试题求解答
本帖最后由 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  求解决方法

------解决方案--------------------
引用:
for后面的(i) 是什么作用  为什么除了就不行

请看下面一段代码,更容易理解

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连到一起就是上面的代码,建议使用这种方式,上面的代码有循环引用的嫌疑
}