javascript - 在带有匿名函数的循环中运行这个 addEventListener 会创建 30 个单独的函数对象吗?
问题描述
问题 1a:您好,我想知道运行以下代码的版本 1 是否会导致创建多个匿名函数(在 addEventListener 部分),为可点击节点列表的每个元素创建一个?
问题 1b:在版本 2 中,我只是向 addEventListener 传递了对另一个函数的引用。版本 2 与版本 1 相比有什么好处吗?
我的两个问题都是相关的。我不确定 addEventListener 是否在不同元素之间共享匿名函数。请尽可能详细。我将不胜感激。先感谢您。:)
额外信息:我预计可点击节点列表的长度在 28 到 31(日历)之间。
版本 1:
Base.prototype.addCalendarClickEffect = function () {
let clickable_node_list = this.clickable_node_list
let lastElementClicked = null;
for(let i = 0; i< clickable_node_list.length; i++){
clickable_node_list[i].addEventListener("click", function (event) {
if(lastElementClicked){
lastElementClicked.classList.remove("clicked");
}
event.target.classList.add("clicked");
lastElementClicked = event.target;
});
}
}
版本 2:
Base.prototype.addCalendarClickEffect = function () {
let clickable_node_list = this.clickable_node_list
for(let i = 0; i< clickable_node_list.length; i++){
clickable_node_list[i].addEventListener("click", toggleClickedClass);
}
}
function toggleClickedClass(event) {
if(lastElementClicked){
lastElementClicked.classList.remove("clicked");
}
event.target.classList.add("clicked");
lastElementClicked = event.target;
}
解决方案
推荐阅读
- javascript - 我将如何合并和转换数组中的 JS 对象
- azure - Terraform:如何将 azurerm_api_management_authorization_server 连接到 azurerm_api_management_api
- javascript - 如何在同一函数中进行异步调用后获取更新状态
- asp.net - 如何从另一个带有验证的模型在 asp.net core MVC 中创建下拉列表?
- python - 从numpy数组中获取字符串
- visual-studio - 如何在 Visual Studio 中通过一项操作从 2 个项目构建 2 个可执行文件?
- pycharm - PyCharm:如何使 commit+push 成为默认值?
- r - 将 group_by 和 count() 应用于变量后计算总计百分比
- r - R - 检测除句号外的任何标点符号
- python - 在 tf.keras 模型训练期间“找不到会减少输出时间的可调参数”