首页 >web前端 >js教程 >为什么我的所有点击处理程序都返回'Link 5”?

为什么我的所有点击处理程序都返回'Link 5”?

DDD
DDD原创
2024-12-27 10:47:13197浏览

Why Do All My Click Handlers Return

Javascript 臭名昭著的循环问题:闭包揭开了魔法

当代码片段尝试创建链接集合时,就会出现臭名昭著的循环问题独特的点击处理程序。然而,每次点击都会注册为“链接 5”,施展令人困惑的咒语。

闭包:神秘的巫师

谜底在于 JavaScript 的范围,一个领域界限通过功能,而不是块。闭包,蒙面的巫师,将封闭的范围困在他们的掌握之中。

有缺陷的循环

在错误的循环中,变量“i”被限制在函数内,被关押在封闭式监狱中。当循环完成时,“i”变成“5”,在倒霉的处理程序中留下幽灵般的印记。

救世主循环

一线希望出现在第二个循环。每次迭代都会产生一个独立的函数对象,每个对象都守护着自己的哨兵“num”。这种印记可以抵抗时间的突变,保护处理者免受“5”的阴险咒语的影响。

优化的三位一体

虽然封闭刺激了这种神奇的转变,但它需要高昂的价格——每个链接两个新的函数对象。利用 DOM 的秘密知识可以产生更优雅的解决方案。通过将数据直接存储在节点上,我们可以召唤出与不同记忆的链接,从而摆脱了外部范围的暴政。

奥术长生不老药

真正的魅力在于这部分代码:

function linkListener() {
    alert(this.i);
}

function addLinks() {
    for(var i = 0; i < 5; ++i) {
        var link = document.createElement('a');
        link.appendChild(document.createTextNode('Link ' + i));
        link.i = i;
        link.onclick = linkListener;
        document.body.appendChild(link);
    }
}

每个链接都有自己的“i”,将其独特的身份融入点击的诱惑中。闭合的魔法现在被精确运用,施展神奇的咒语,使链接能够回忆起自己的命运。

以上是为什么我的所有点击处理程序都返回'Link 5”?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn