日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JavaScript ES2015

發布時間:2025/7/14 javascript 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaScript ES2015 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
<button></button> <button></button> <button></button> <button></button><div id="output"></div><script>var buttons = document.querySelectorAll('button')var output = document.querySelector('#output')for (var i = 0; i < buttons.length; i++) {buttons[i].addEventListener('click', function() {output.innerText = buttons[i].innerText})} </script>
從直觀角度看 這段代碼沒有語義上的錯誤,但是當我們點擊任意一個按鈕時,就會報出這樣的錯誤信息:

Uncaught TypeError: Cannot read property 'innerText' of undefined

出現這個錯誤的原因是因為button[i]不存在,即為undefined

每次我們點擊按鈕時,事件監聽回調函數中得到的變量i都會等于button.length,也就是4 而button[4]恰恰不存在,所以導致錯誤發生

導致i得到的值都是button.length的原因是因為JavaScript中沒有塊兒級作用域,而使對i的變量引用(Reference)一直保持在上一層作用域(循環語句所在層)上,而當循環結束時i正好是buttons.length

做一個小改動如下:

?

// ... for (/* var */ let i = 0; i < buttons.length; i++) {// ... } // ...

?

通過 把for語句中對計數器i的定義語句從var換成let ,因為let語句會使該變量處于一個塊兒級作用域中,從而讓事件監聽回調函數中的變量引用得到保持,

?

?

  出現這個錯誤的原因是因為button[i] 不存在,即為undefined

?

?

?

?

?

轉載于:https://www.cnblogs.com/moli-/p/6549101.html

總結

以上是生活随笔為你收集整理的JavaScript ES2015的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。