在循环内错误使用函数定义(js的问题)

考虑下面代码:

html 复制代码
var elements = document.getElementsByTagName('input');
var n = elements.length;    // Assume we have 10 elements for this example
for (var i = 0; i < n; i++) {
    elements[i].onclick = function() {
        console.log("This is element #" + i);
    };
}

根据上面的代码,如果有10input 元素,点击任何一个都会显示 "This is element #10"。 这是因为,当任何一个元素的onclick被调用时,上面的for循环已经结束,i的值已经是10了(对于所有的元素)。

我们可以像下面这样来解决这个问题:

html 复制代码
var elements = document.getElementsByTagName('input');
var n = elements.length;   
var makeHandler = function(num) { 
     return function() {  
         console.log("This is element #" + num);
     };
};
for (var i = 0; i < n; i++) {
    elements[i].onclick = makeHandler(i+1);
}

makeHandler 是一个外部函数,并返回一个内部函数,这样就会形成一个闭包,num 就会调用时传进来的的当时值,这样在点击元素时,就能显示正确的序号。

相关推荐
禁默3 分钟前
数字人切入,我用魔珐星云搭建政务大厅咨询数字人,低成本落地便民接待
前端·人工智能·政务
小二·7 分钟前
React 18 新特性与 Hooks 进阶实战
前端·react.js·前端框架
GoogleDocs9 分钟前
ProbeKit Lite 是什么?一款用于检测 AI 中转站真实度的工具
javascript·人工智障
li-xun10 分钟前
2026年6月10日博客精选
javascript·人工智能·ui
Shadow(⊙o⊙)10 分钟前
QT常用控件3.0,font字体设置,toolTip提示,focusPolicy焦点定位原则,中型控件StyleSheet样式表。
服务器·开发语言·前端·c++·qt
Shadow(⊙o⊙)13 分钟前
QT常用控件2.0,windowOpacity窗口透明度,Cursor光标设置
开发语言·c++·qt
cfm_291416 分钟前
JVM对象逃逸分析深度详解
java·开发语言·jvm
SilentSamsara16 分钟前
LLM API 工程化:OpenAI/DeepSeek/国产模型统一调用层设计
开发语言·人工智能·python
六月的可乐20 分钟前
【干货】小程序虚拟瀑布流探索小结
前端·react.js·小程序
weixin_5231853221 分钟前
SimpleDateFormat为什么线程不安全?源码级解析与解决方案
java·开发语言·安全