?警告:传统迭代协议是一个SpiderMonkey特性, 并且在将来可能会被移除。请使用for..of 循环与迭代协议。

## 废弃的Firefox专属迭代协议

Firefox在version 26版本生效的与ES2015迭代协议相似的另一种迭代协议。以下统称为旧迭代协议。

?旧迭代器对象在使用next()方法时，会在循环到最后时抛出`StopIteration`。

属性 | ??描述
--- | ---
`next` | 一个会返回值的无参数函数

### ?旧迭代器与ES6迭代器的区别

- ?旧迭代器在调用next的时候立即返回相应的值而不会返回一个代理对象。
- 循环遍历中通过抛出`StopIteration`对象结束循环。

### 旧迭代器协议示例

    function makeIterator(array){
        var nextIndex = 0;

        return {
           next: function(){
               if(nextIndex < array.length){
                   return array[nextIndex++];
               else
                   throw new StopIteration();
           }
        }
    }

    var it = makeIterator(['yo', 'ya']);

    console.log(it.next()); // 'yo'
    console.log(it.next()); // 'ya'
    try{
        console.log(it.next());
    }
    catch(e){
        if(e instanceof StopIteration){
             // iteration over
        }
    }

## ?参见

- 迭代器和生成器
- ?更多废弃与过时的JavaScript属性