面试题之闭包

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



<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; ifunction() {    
         alert(i);    
    } 
  }
}
script> 
head> 
<body onload="init();"> 
<p>产品 0p> 
<p>产品 1p> 
<p>产品 2p> 
<p>产品 3p> 
<p>产品 4p> 
body> 
html> 

什么是闭包的问题请参见博客揭开Javascript闭包的真实面目

点击每一个p都会弹出提示框,内容为5
面试题之闭包_第1张图片

解释:因为闭包会保存使其中的变量i一直存在内存中,for循环执行后i=5,所以所有的p都会弹出5;

修改方法一:

function init() {

    var pAry = document.getElementsByTagName("p");    
    for( var i=0; ifunction(n){
            pAry[i].onclick=function(){

                    alert(n);
            }
        })(i)

  }
}

修改方法二:

function init() {

    var pAry = document.getElementsByTagName("p");    
    for( var i=0; ifunction(n){     
        return  function(){        
                 alert(n);      
           }    
      })(i); 

  }
}

你可能感兴趣的:(js)