<input type="text" id="main" />
<script>
var obj = document.getElementById("main");var items = [ "click", "keypress" ];for ( var i = 0; i < items.length; i++ ) {
    (function(){
        obj[ "on" + items[i] ] = function() {
            alert( "Thanks for your " + items[i] );
        };
    })();
}
</script>
这是我在看精通javascript时看到的,
不过显示出来的是undefined.为什么呢?i的值为2.

解决方案 »

  1.   

    for ( var i = 0; i < items.length; i++ ) {
        (function(item){
            obj[ "on" + item ] = function() {
                alert( "Thanks for your " + item );
            };
        })(items[i]);
    }
      

  2.   

    真正的问题是在i一直是外面的那个i,for循环后i=2,所以里面的items[i]通通都是items[2],而items[2]是不存在的
      

  3.   

    哦,我明白了。
    5L说的很明白了,里面那个函数得到的i只是一个i,而不是当i=1时的1等等。
    谢谢了。