摘要:第二種就是在點擊事件外加入立即執行函數,把當做變量傳遞進點擊事件,這樣也可獲取到每次點擊的索引。
今天在前端技術群中看到有位初學朋友問了個問題,我貼一下代碼:
js:
var pList = document.getElementsByTagName("p"); for(var i=0;ihtml:
1
2
3
4
5
他的想法是點擊每一個P標簽的時候獲取到點擊的p標簽的html,代碼看著沒什么問題,可實際報錯了~
這個問題估計大部分人一開始都遇到過,為什么這條語句不好使呢?
個人理解,頁面初始化的時候i就已經從0走到了4,當你點擊P的時候,此時i已經變成了5,而pList[5]并不存在,所以會報undefined的錯誤,改法有兩種:
第一種把pList[i]改成this,當p標簽被點擊時this直接代表p進行獲取html。
第二種就是:var pList = document.getElementsByTagName("p"); for(var i=0;i在點擊事件外加入立即執行函數,把i當做變量傳遞進點擊事件,這樣也可獲取到每次點擊的索引。
這個如果深刻點說,就涉及到js里至關重要的閉包環節了~
點擊事件在循環內部,然而還想調用人家的變量,就像你在別人家看著人家主人在跑步,你還想用跑步機,那么你要么等人家跑完了,你用著人家“跑完”的跑步機(文中的i=5),要么你就讓主人給你同時在旁邊安裝一個一模一樣的跑步機,你們一起(立即執行函數)
粗略的寫完了,嘿嘿,歡迎一起探討問題指正錯誤,高手可以跳過,寫出來也是為了做個筆記,溫故而知新~
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/79739.html
摘要:原文鏈接在這之前先要了解一下循環中和的區別是函數級作用域或者全局作用域,是塊級作用域看一個例子循環中的邏輯代碼函數下的輸出,全局下的不存在現在我們把換為循環中的邏輯代碼報錯了,不在函數作用域下,當然肯定也不會再全局下因為和的這個區別當然和的 原文鏈接在這之前先要了解一下 for循環中let 和var的區別 var 是函數級作用域或者全局作用域,let是塊級作用域看一個例子 fu...
摘要:第一部分執行代碼之后,返回了一個新的匿名函數,此時在全局作用域調用匿名函數它不在是的屬性或者方法,此時調用者是因此輸出是。總結關于中的,記住誰調用,就指向誰要訪問閉包的,要定義個變量緩存下來。 前言: 這是一篇關于閉包函數的總結和筆記 希望對大家有點幫助 寫的不好的地方,也請大家多多指教 一: js中的命名函數,匿名函數,自調用函數和回調函數 1.命名函數: 函數如果有名字,就...
摘要:執行返回的內部函數,依然能訪問變量輸出閉包中的作用域鏈理解作用域鏈對理解閉包也很有幫助。早期的版本里采用是計數的垃圾回收機制,閉包導致內存泄露的一個原因就是這個算法的一個缺陷。 關于閉包,我翻了幾遍書,看了幾遍視頻,查了一些資料,可是還是迷迷糊糊的,干脆自己動手來個總結吧 !歡迎指正... (~ o ~)~zZ 1. 什么是閉包? 來看一些關于閉包的定義: 閉包是指有權...
摘要:閉包能用來實現私有化和創建工廠函數等作用。關于閉包的常見面試題是這樣的寫一個函數,循環一個整數數組,延遲秒打印這個數組中每個元素的索引。 文章來源:http://mp.weixin.qq.com/s/vs0... 前言 在公眾號上看到了這篇文章,覺得很有用,有助于理解JS學習中的一些重點難點。決定把它整理下發布出來。該文章主要介紹了JS中的三個問題。在以后的幾篇文章里,我會詳細介紹這三...
閱讀 1294·2021-10-08 10:05
閱讀 4107·2021-09-22 15:54
閱讀 3105·2021-08-27 16:18
閱讀 3107·2019-08-30 15:55
閱讀 1436·2019-08-29 12:54
閱讀 2748·2019-08-26 11:42
閱讀 543·2019-08-26 11:39
閱讀 2129·2019-08-26 10:11