亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么迭代器對象變量未定義?

為什么迭代器對象變量未定義?

交互式愛情 2023-05-25 15:41:33
學習在 Javascript 中使對象可迭代。對象是:var arrayLikeObject = {    0: "hello",    1: "there",    2: "crappy coder",    length: 3,}然后我這樣做以使其可迭代:arrayLikeObject[Symbol.iterator] = function(){    return {        current: 0, // <---- but... it IS defined.        next() {            // let current = 0; // putting it here makes it work            if(current < this.length) {                let a = current;                current++;                return {done: false, value: this[a]};            }            else {                return {done: true};            }        }    };};然后當我運行它時:console.log("after making it iterable: ==============");for(let str of arrayLikeObject) {    console.log(str);}我得到“當前未定義”但據我所知,它是。我就是不明白。我認為函數可以看到其作用域之外的變量,但反過來卻不行,除非如果這是正確的術語,它們會被“掩蓋”。我忘了。
查看完整描述

1 回答

?
胡說叔叔

TA貢獻1804條經驗 獲得超8個贊

current不是變量,它是屬性,因此您需要將其引用為this.current.


但是,您還有另一個問題this:


在this.length和中this[a],this對象不是arrayLikeObject,而是具有方法的對象next()。


你也可以解決這個問題,但我認為走另一條路更簡單,做next一個箭頭函數。這樣this.length,this[a]將按預期工作。current在閉包中創建一個普通變量:


var arrayLikeObject = {

    0: "hello",

    1: "there",

    2: "crappy coder",

    length: 3,

}


arrayLikeObject[Symbol.iterator] = function(){

    let current = 0;

    return {

        next: () => {

            if(current < this.length) {

                return {done: false, value: this[current++]};

            }

            else {

                return {done: true};

            }

        }

    };

};


console.log("after making it iterable: ==============");

for(let str of arrayLikeObject) {

    console.log(str);

}


查看完整回答
反對 回復 2023-05-25
  • 1 回答
  • 0 關注
  • 138 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號