javascript - 为什么 x 输出 onclick 等于被点击的列表索引?
问题描述
我之前遇到过这段代码,我不明白为什么当您单击列表项时,数组索引上的列表项编号会记录到控制台。每次单击列表项时控制台不应该记录 4 吗?更好的是,难道不应该因为 items[x] 等于 4 而无法单击任何列表项吗?我在这里不明白什么?
html
<ul>
<li>0</li>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
javascript
var items = document.getElementsByTagName("li");
for(let x=0; x < items.length; x++){
items[x].onclick = function(){
console.log(x);
}
}
解决方案
为什么您认为每次单击列表项时控制台日志都应该打印 4?
let
在 JavaScript 中定义了自己的范围,这就是为什么当前迭代值会在后面保留(当元素被点击时)。
尽管您可以通过以下方式获得预期的输出var
:
var items = document.getElementsByTagName("li");
for(var x=0; x < items.length; x++){
items[x].onclick = function(){
console.log(x);
}
}
<ul>
<li>0</li>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
推荐阅读
- c++ - 使用 mapi.h 函数
- java - 我想删除 listView 的数据并出现这个异常 java.lang.NullPointerException
- c++ - 使用此指针与使用两个参数的内联函数的性能影响
- javascript - 如何将对象 A 转换为具有对象 A 属性的对象数组并为其分配值和标签
- javascript - 为什么我的 HTML 标签中的变量没有显示出来?
- sql - 全局临时表 (GTT) 和集合之间的区别
- html - 如何模拟 SHIFT+10 和 ALT+F4 到条形码
- node.js - 生产中的随机错误 404 runtime.js 角度
- c# - iText7 叠加覆盖两个PDF作为一个新问题
- java - 是否可以部分自动格式化代码?