为什么我们需要迭代和迭代器概念?

时间:2016-04-11 08:31:53

标签: javascript ecmascript-6

在ECMAScript6中,iterator是一个带有next()方法的对象,它返回一个具有两个属性的对象:{value, done}。 E.g:

function createIterator(ra) {
    let i = 0;
    return {
        next() {
            if (i < ra.length)
                return {value: ra[i++],
                        done: false};
            else
                return {value: undefined,
                        done: true};
        }
    };
}

创建一个迭代器之后,人们发现它本身并没有多大用处,因为没有内置语法可以利用迭代器。相反,必须做以下事情:

    const it = createIterator(['a', 'b', 'c']);
    while (true) {
        const o = it.next();
        if (o.done)
            break;
        else
            console.log(o.value);
    }

&#34;可迭代&#34;另一方面,是一个具有Symbol.iterator属性的对象,该属性必须是一个返回迭代器的无参数函数:

function createIterable(ra) {
    let it = createIterator(ra);
    return {
        [Symbol.iterator]() {return it;}
    };
}

...当我们创建一个iterable时,我们终于能够使用for of语法:

for (let v of createIterable(['a', 'b', 'c']))
    console.log(v);

查看上面的代码,&#34; iterable&#34;的附加值&#34; iterator&#34;上的对象不容易察觉。那么为什么Javascript需要这两个独立的iterable和iterator概念呢?顺便说一句,这就是Java does as well所以必须有一些与语言无关的理由,为什么有这两个不同的概念是个好主意。

0 个答案:

没有答案