解决方案 »

  1.   

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>小程序</title>
    <script>
    window.onload = function(){
    var liNodes = document.getElementsByTagName("li");
    for(var i=0; i<liNodes.length; i++){
    (function(x){
    liNodes[x].onclick = function(){
    alert(liNodes[x].firstChild.nodeValue); // 为什么这里报未定义?
    alert(x); // 这里输出的结果为什么是8? 为什么不是1,2,3,4 等值?
    }})(i)
    }
    }
    </script>
    </head>
    <body>
    <p>你喜欢哪个城市?</p>
    <ul id="city">
    <li id="bj" name="BeiJing">北京</li>
    <li>上海</li>
    <li>东京</li>
    <li>首尔</li>
    </ul><br><br>
    <p>你喜欢哪款单机游戏?</p>
    <ul id="game">
    <li id="rl">红警</li>
    <li>实况</li>
    <li>极品飞车</li>
    <li>魔兽</li>
    </ul>
    </body>
    </html> 1.闭包问题
    2.liNodes不是inNodes
      

  2.   


    不明白什么是闭包,刚接触javascript,能请朋友给我解释下么?
      

  3.   

    window.onload = function(){
      var liNodes = document.getElementsByTagName("li");
      for(var i=0; i<liNodes.length; i++){
        (function(i) {
          liNodes[i].onclick = function(){
            alert(this.innerHTML + i);
          }
        })(i);
      }
    }
      

  4.   

    for(var i=0; i<liNodes.length; i++){
    liNodes[i].onclick = function(){
    alert(inNodes[i].firstChild.nodeValue); // 为什么这里报未定义?
    alert(i); // 这里输出的结果为什么是8? 为什么不是1,2,3,4 等值?   //因为执行这个的时候  i 是8 
    }
    }整个运行 上下文的i 在for循环中不断变化  你alert(i) 调用的是i    这个i 变量在实际访问的时候才 去获取了i的值
    怎么破 看楼上
      

  5.   

    朋友能告诉我为什么 alert(inNodes[i].firstChild.nodeValue); // 为什么这里报未定义? 报未定义?
      

  6.   

    上面就是闭包的。 nNodes[i]. 你看看里面是什么调试看看。
      

  7.   

    朋友能告诉我为什么 alert(inNodes[i].firstChild.nodeValue); // 为什么这里报未定义? 报未定义?for(var i=0; i<liNodes.length; i++){运行完后 i大于  length 所以没有 i指向的元素