在循環內錯誤使用函數定義(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.pswp.cn/news/210955.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/210955.shtml
英文地址,請注明出處:http://en.pswp.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…