两段代码很相似,大家猜猜他们的产生的效果如何?
第一段:<script type="text/javascript">
function getLinks() {
var a = document.getElementsByTagName("a"); // 得到页面所有的超链接
return a;
}
function onclickEventHandler(oTarget) {
if (oTarget.addEventListener) {
        oTarget.addEventListener("click", function() {clickIt(oTarget);}, false);
    } else if (oTarget.attachEvent) {
        oTarget.attachEvent("onclick", function() {clickIt(oTarget);});
    } else {
        oTarget["onclick"] = clickIt(oTarget);
    }
}
function clickIt(obj) {
var a = getLinks();
for (var i = 0; i < a.length; i++) {
if (obj == a[i]) {
a[i].style.color = "#7F007F";
} else {
a[i].style.color = "blue";
}
}
}
function pageOnload() {
var a = getLinks();
if (a.length) {
for (var i = 0; i < a.length; i++) {
var oTarget = a[i];
onclickEventHandler(oTarget);
}
}
}
</script>
第二段:<script type="text/javascript">
function getLinks() {
var a = document.getElementsByTagName("a"); // 得到页面所有的超链接
return a;
}
function onclickEventHandler(oTarget, fun) {
if (oTarget.addEventListener) {
        oTarget.addEventListener("click", fun, false);
    } else if (oTarget.attachEvent) {
        oTarget.attachEvent("onclick", fun);
    } else {
        oTarget["onclick"] = fun;
    }
}
function clickIt(obj) {
var a = getLinks();
for (var i = 0; i < a.length; i++) {
if (obj == a[i]) {
a[i].style.color = "#7F007F";
} else {
a[i].style.color = "blue";
}
}
}
function pageOnload() {
var a = getLinks();
if (a.length) {
for (var i = 0; i < a.length; i++) {
var oTarget = a[i];
onclickEventHandler(oTarget, function() {clickIt(oTarget);});
}
}
}
</script>下面是页面html代码:<html>
<body onload="pageOnload();">
<a>第一个链接</a>
<a>第二个链接</a>
<a>第三个链接</a>
</body>
</html>

解决方案 »

  1.   

    第二段里for循环改下                (function(i){
                        var oTarget = a[i];
                        onclickEventHandler(oTarget, function() {clickIt(oTarget);});
                    })(i);
      

  2.   

    是有些高深所以好多人弄不清楚,一直半解,如果想深入了解需要对
    ECMAScript虚拟机有较深的研究才成。我的水平有限,还停留在感性
    认识阶段,大家可以搜索下周爱民的文章,讲的还是比较详细的
      

  3.   

    看看斑竹今天不打算起床了俺觉得所谓“闭包”可以简单解释为:一函数对于其外部变量的引用,从而导致了外部变量生命周期延长的效果!lz 的代码一,正确复制了元素的引用,
    而代码二,其实复制了 a[3],但 a[3],恰恰不存在,即 undefined!应该是这样,先去吃饭,回来再仔细琢磨一下!
      

  4.   

    闭包就是一个函数中的函数,它不能继承外面的this指针,它记住了它的外面发生了什么。
      

  5.   

    不讨论了,JavaScript高级知识确实难