allInput访问不了的话,你的input又怎么能加事件的呢?

解决方案 »

  1.   

    当执行循环的时候, 
    for (var a = 0; a < allInput.length; a++)
    {
        allInput[a].className = '';
    }
    要用到 allInput, 会现在当前环境先找,是否有变量声明,如果没有 去上一层allInput[i].onclick = function(){xxx}  里找是否有声明
    如果还没有 再去上一层for (var i = 0; i < allInput.length; i++){xxxxx} 里 ,结果还没有,就再去上一层找window.onload = function(){var allInput = xxxxx} 这层找到了,为什么不能用
      

  2.   

    allInput[i].onclick = function()
          {
                for (var a = 0; a < allInput.length; a++)
                {
                    allInput[a].className = '';
                }
                 
                this.className = 'hongSe';
            }
    这个吧,按我的理解,就是把整个匿名函数,也就是这段:function()
          {
                for (var a = 0; a < allInput.length; a++)
                {
                    allInput[a].className = '';
                }
                 
                this.className = 'hongSe';
            }赋给按钮的 onclick 事件,并不去解析或执行里面的任何代码。当按钮被点击时它会执行这个函数,但是这个时候 window.onload 的函数早已执行完毕,allInput 应该被销毁了。它是怎么访问到的?我一定是哪里理解出错了。请各位指正。
      

  3.   

    var allInput = document.getElementsByTagName('input');
    函数执行完后,allInput是会被销毁
    但是他原先指向的 input 控件并不会销毁
    那些匿名函数是绑定在 input 空间上的,自然还是生效的
      

  4.   

    我觉得应该这样理解,你在循环给click事件函数的时候,allinput已经被处理成具体数据了,比如allinput.length已经变成了3,而allinput[0]已经变成了input1对象,所以onload执行完也不会有影响了
      

  5.   

    作用域,闭包再好好看看!
    还有javascript函数的执行环境,活动对象,这些看完,你就会明白了