按下刪除按鈕對映的todo要刪除
但我不知道該如何取得索引
作業目前卡在這裡(第27-33行)https://jsfiddle.net/birdie2019/7haz6fLj/19/

按讚的人:

共有 9 則留言

非常好的問題~!

把外面那個 for loop 改寫

before

  for (var todo of todos) {

after

  for (var index in todos) {
    var todo = todos[index];

像這樣,把 for of 改成 for in 就可以了~!

onclick 裡面不需要寫 for loop,可以直接使用 index

試試看吧!

按讚的人:

課程內容有一段

這邊多介紹一個 for in 的寫法,需要索引時可以用

就是在教這個~

按讚的人:

重新做了一遍
https://jsfiddle.net/birdie2019/7haz6fLj/23/
但第29行console.log(index) 結果都為2
還是刪除不到對映的todo,請問我是哪邊有做錯?

按讚的人:

把 var 改成 const 試試看

for (const index in todos) {

這是這個程式語言,設計失敗的地方

這是一個稱為 hoisting 的現象,我認為根本是 bug

按讚的人:

有興趣的話,可以研究一下 hoisting 這個現象

還是很困擾的話,我找時間寫文章說明

按讚的人:

成功了!謝謝指點!
之前JavaScript(五)第四課站長有提過,果然自己遇到了才感受的到這個問題!

按讚的人:

真巧今天逛到hoisting的文章

【ES6 小筆記】變數提升(Hoisting)與暫時死區(TDZ)

1. hoisting會出現在宣告的動作。
2. hoisting的特性與JavaScript建立執行環境分為兩個階段有關,這兩個階段可以簡單地理解成先宣告再執行,而讓程式碼從肉眼上並沒有移動位置,但實際執行結果卻又像是宣告的程式碼都被寫在最上方。
3. 不只var會hoisting,let、const的宣告動作也會hoisting,差異只在於用let、const的暫時死區(TDZ)結束的時間比較晚,所以會跳出錯誤,而不是印出undefined。
4. hoisting有優先權的差異,函式高於變數。
按讚的人: