<script type="text/javascript">
/*
var e = document.getElementById("e");e.onblur = function(){
//触发blur的时候才执行。
myonblur(a1, a2);
};function myonblur(a1, a2) {
}e.onclick = aaa(myonblur, "str1", "str2");function aaa(fun, str1, str2) {
//这里如果是call的话会立即执行func函数的,然后onclick的结果是myonblur执行的结果。。
return fun.call(null, str1, str2);
};function myonblur(str1, str2) {
alert(str1 + str2);
}
*/
</script>

解决方案 »

  1.   

    我看了是我的错误,以上代码应该
    e.onclick = aaa( myonblur,"str1", "str2");
    function aaa(fun, str1, str2) { 
    return function(){ fun.call(null, str1, str2);}
    };
    function myonblur(str1, str2) { 
    alert(str1 + str2);
    }
    应该是这样,想问两个方法的区别都是触发事件可得到同样的结果
      

  2.   


    <script type="text/javascript">
    /*
    var e = document.getElementById("e");e.onblur = function(){
    /*
    在循环的过程中
    每个函数的a1和a2都引用着外面的a1和a2,又因为循环过程中a1和a2一直在变,
    所以导致循环结束后,a1和a2的结果是最后一次循环的结果
    所以函数里的a1和a2也就是都是循环最后a1和a2的最后的结果
    */
        myonblur(a1, a2);
    };function myonblur(a1, a2) {
    }e.onclick = aaa(myonblur, "str1", "str2");function aaa(fun, str1, str2) {
    /*
    这里函数每次都会执行。。
    所以产生了不同的str1和str2
    所以每个函数都会引用这些“自己”的str1和str2
    因为这个函数执行后
    它里面返回了一个函数
    而返回的那个函数里又需要用到str1和str2
    所以这些需要的资源不会释放
    这种东西就叫做闭包
    */
        return function () {
    fun.call(null, str1, str2);
    }
    };function myonblur(str1, str2) {
        alert(str1 + str2);
    }
    </script>
      

  3.   

    明白了,谢谢muxrwc,有你真不错