繁体   English   中英

我正在尝试优化第一块代码。 为什么我的方法不起作用? 缩短代码的最佳方法是什么?

[英]I am trying to optimize the first chunk of code. Why doesn't my approach work? What's the best approach to shorten the code?

我尝试优化的代码:

function classToggle1() {
    document.getElementById("div1").classList.toggle('fa-folder');
    document.getElementById("div1").classList.toggle('fa-folder-open');
}
function classToggle2() {
    document.getElementById("div2").classList.toggle('fa-folder');
    document.getElementById("div2").classList.toggle('fa-folder-open');
}
function classToggle3() {
    document.getElementById("div3").classList.toggle('fa-folder');
    document.getElementById("div3").classList.toggle('fa-folder-open');
}
document.querySelector('#x').addEventListener('click', classToggle1);
document.querySelector('#y').addEventListener('click', classToggle2);
document.querySelector('#z').addEventListener('click', classToggle3);

我的方法在浏览器中不起作用:

function classToggle(x) {
    document.getElementById(x).classList.toggle('fa-folder');
    document.getElementById(x).classList.toggle('fa-folder-open');
}
document.querySelector('#xx').addEventListener('click', classToggle("div1"));
document.querySelector('#yy').addEventListener('click', classToggle("div2"));
document.querySelector('#zz').addEventListener('click', classToggle("div3"));

在这里,我将“div1”“div2”和“div3”作为 arguments 传递。 我的理解是这两个代码块的行为应该相同?

在第一个示例中,您传入 function ( classToggle1 ),而在第二个示例中,您正在调用 function (恰好返回undefined )。 您可以更新第二个以 enlambda 调用。

document.querySelector('#xx').addEventListener('click', () => classToggle("div1"));

或者

document.querySelector('#xx').addEventListener('click', function () { classToggle("div1"); })

这应该有效。

document.querySelector('#xx').addEventListener('click', () => classToggle("div1"));
document.querySelector('#yy').addEventListener('click', () => classToggle("div2"));
document.querySelector('#zz').addEventListener('click', () => classToggle("div3"));

关键是,您传递的是 classToggle(x) 的 output 而不是传递 function 本身。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM