![](/img/trans.png)
[英]why my code doesn't work when I am trying to concatenate a function's return value with a string?
[英]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.