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

考虑下面代码:

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了(对于所有的元素)。

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

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 就会调用时传进来的的当时值,这样在点击元素时,就能显示正确的序号。

作者:王大冶
链接:https://juejin.cn/post/7161959592967012366

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/210955.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用WSL Linux编译OpenBMC

WSL2安装 &#xff08;1&#xff09; 旧版 WSL 的手动安装步骤 | Microsoft Learn &#xff08;2&#xff09; https://www.cnblogs.com/37yan/p/16169564.html &#xff08;3&#xff09; 在win10中安装linux--使用WSL_wsl.conf-CSDN博客 安装Ubuntu 18.04 on Windows 安…

联合体和枚举

联合体&#xff1a; 联合体是什么&#xff1f; 联合体也是一种自定义类型&#xff0c;这种类型定义的变量也包含一系列类型&#xff0c;特征是这些类型公用一块内存空间(所以叫联合体也叫公用体)可以理解为结构体公用一块内存。 //联合-联合体-共用体 //联合也是一种特殊的自…

TOMCAT9安装

1、官网下载 2、解压到任意盘符&#xff0c;注意路径不要有中文 3、环境变量 path 下 配置 %CATALINA_HOME%\bin 4、找到tomcat9/bin&#xff0c; 点击 start.bat启动 tomcat

目标检测、目标跟踪、重识别

文章目录 环境前言项目复现特征提取工程下载参考资料 环境 ubuntu 18.04 64位yolov5deepsortfastreid 前言 基于YOLOv5和DeepSort的目标跟踪 介绍过针对行人的检测与跟踪。本文介绍另一个项目&#xff0c;结合 FastReid 来实现行人的检测、跟踪和重识别。作者给出的2个主…

jsp 设备预约管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 设备预约管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0…

SQL命令---添加新字段

介绍 使用sql语句为表添加新字段。 命令 alter table 表名 add 新字段名 数据类型;例子 向a表中添加name字段&#xff0c;类型为varchar(255)。 alter table a add name varchar(255);下面是执行添加有的表结构&#xff1a;

TimescaleDB-1 安装

前置条件&#xff1a; 1、操作系统ubuntu2204 2、已经通过apt的方式安装了pg14 当然其他的操作系统&#xff0c;官方文档中也有说明。 一、安装 https://docs.timescale.com/self-hosted/latest/install/installation-linux/ Installing self-hosted TimescaleDB on Debian-…

springboot+jdbcTemplate+sqlite编程示例——以沪深300成分股数据处理为例

引言 我们在自己做一些小的项目或者小的数据处理分析的时候&#xff0c;很多时候是不需要用到mysql这样的大型数据库&#xff0c;并且也不需要用到maven这样很重的框架的&#xff0c;取而代之可以使用jdbcTemplatesqlite这样的组合。 本文就介绍一下使用springbootjdbcTempla…

课堂练习3.4:进程的切换

3-9 课堂练习3.4:进程的切换 进程切换是支持多进程的一个关键环节,涉及到 CPU 现场的保存和恢复,本实训分析 Linux 0.11 的进程切换过程。 第1关第一次进程切换过程分析 任务描述 本关任务回答问题: 在第一次进程切换时: 1.是从几号进程切换到几号进程?0 号进程和 1 号…

Linux指令——scp:传输文件

Linux指令——scp&#xff1a;传输文件 简介&#xff1a; Linux文件互传指令 使用方法&#xff1a; scp [可选参数] file_source file_target # 可选参数一般为-r&#xff0c;递归传输 # 举例如下&#xff1a; scp /home/test/test.txt root192.168.1.200:/home/test/tes…

Java线程概念详解

线程 概念 1.程序:未解决某种问题,使用计算机语言编写的一些列指令(代码)的集合 2.进程:正在运行的程序(被加载到内存中),是操作系统进行资源分配的最小单位 3.线程:进程可以进一步细化为线程(比进程更小)且线程是隶属于进程的,是操作系统执行的最小的执行单元 也是cpu进行任…

CleanMyMac X2024免费许可证(激活教程)

CleanMyMac X是一款流行的系统优化工具&#xff0c;专为Mac用户设计。它可以帮助用户清理Mac系统中的垃圾文件、卸载不需要的程序、加速Mac性能以及保护Mac系统的安全。 一、简介 CleanMyMac X是一款功能强大的系统优化工具&#xff0c;它可以帮助用户清理Mac系统中的垃圾文件…

优麒麟ubuntukylin安装UE4.27.2

优麒麟ubuntukylin安装UE4.27.2 在&#xff08;国产&#xff09;优麒麟 ubuntukylin Linux平台上编译测试安装虚幻引擎。 优麒麟系统 这里选择的是官方增强版 https://www.ubuntukylin.com/downloads/ 同样的可以选择对应的Ubuntu22.04 LTS&#xff0c;唯一的区别就是优麒麟…

【精选】SpringMVC简介及其执行流程,参数获取方式

SpringMVC简介 MVC模型 MVC全称Model View Controller&#xff0c;是一种设计创建Web应用程序的模式。这三个单词分别代表Web应用程序的三个部分&#xff1a; Model&#xff08;模型&#xff09;&#xff1a;指数据模型。用于存储数据以及处理用户请求的业务逻辑。在Web应用中&…

采用NSD评估ADC性能

概要 评估采样器的传统性能指标SNR、SFDR和ENOB最早被用于二战时期,这些性能指标使用于具有通道选择性和低通采样使用的ADC,并不适用于近些年的射频直采ADC,因此需要引入更合适的噪声谱密度NSD(Noise Spectrum Density)指标来评估噪声性能。 传统技术指标的含义 无杂散…

async函数和await表达式

async函数 函数的返回值为promise对象 &#xff08;Promise介绍&#xff09;promise对象的结果由async函数执行的返回值决定&#xff0c;如果对象内返回非promise对象&#xff0c;比如字符串&#xff0c;那么返回结果是成功的promise对象&#xff0c;如果返回的是promise对象&…

Photoshop Circular Text

Ctrl N 新增 现学现卖

uniapp移动端悬浮按钮(吸附边缘)

Uniapp移动端悬浮按钮可以通过CSS实现吸附边缘的效果。具体实现步骤如下&#xff1a; html&#xff1a; <movable-area class"movable-area"><movable-view class"movable-view" :position"position" :x"x" :y"y"…

HarmonyOS4.0从零开始的开发教程06常用基础组件

HarmonyOS&#xff08;四&#xff09;常用基础组件 1 组件介绍 组件&#xff08;Component&#xff09;是界面搭建与显示的最小单位&#xff0c;HarmonyOS ArkUI声明式开发范式为开发者提供了丰富多样的UI组件&#xff0c;我们可以使用这些组件轻松的编写出更加丰富、漂亮的界…

代码随想录-刷题第二十二天

235.二叉搜索树的最近公共祖先 题目链接&#xff1a;235. 二叉搜索树的最近公共祖先 思路&#xff1a;根据二叉搜索树的特性&#xff0c;只需要判断当前节点是否在[p,q]范围内就可以&#xff0c;如果在这个范围里&#xff0c;说明当前节点就是其最近公共祖先。 class Soluti…