You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中var与let声明变量导致点击元素结果差异的原因咨询

问题原因解析:var与let在事件绑定中的作用域差异

为什么var会只输出最后一个元素

用var声明的变量属于函数作用域(若不在函数内则为全局作用域),在循环中使用var时,整个循环只会创建一个变量绑定。所有点击事件的回调函数都会共享这个变量的引用——当你触发点击事件时,循环早已执行完毕,变量的值已经被更新为循环的最后一个元素,因此所有点击操作都会输出最后一个元素的内容。

为什么let能正确获取每次点击的元素

let是ES6新增的变量声明方式,属于块级作用域。在循环中使用let时,每次循环迭代都会创建一个新的独立变量绑定,每个点击事件的回调函数都会捕获当前迭代的那个变量。这样当你点击对应元素时,回调函数引用的是当时循环迭代的元素,自然能正确输出对应内容。

示例代码对比

使用var的错误示例

const items = document.querySelectorAll('.item');
for (var i = 0; i < items.length; i++) {
  var item = items[i];
  item.onclick = function() {
    console.log('点击的元素:', item);
  };
}

使用let的正确示例

const items = document.querySelectorAll('.item');
for (let i = 0; i < items.length; i++) {
  let item = items[i];
  item.onclick = function() {
    console.log('点击的元素:', item);
  };
}

效果对比截图

  • var声明时的效果:
    var声明时仅显示最后一次点击元素

  • let声明时的效果:
    let声明时正确显示每次点击元素

内容的提问来源于stack exchange,提问作者Văn Trường Nguyễn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 05:25:04