Discuss
/
JavaScript
/
generator最后done的那个值怎么获取?
generator最后done的那个值怎么获取?
Topic source简短回答: 因为最后一个用的return,而不是yield。如果想要获取最后一个应该用yield
详细回答:
需要考虑for ... of ...
的定义:for.. of...
本质上就是一个根据iterator不停地调用iter.next()
的过程。而EC6中规定,iter.next()
本质上返回一个object. 其含有value
和done
属性。如果obj.done
为true
则表示该iterator结束已经到了最后。
如果我们将 for ... of ...
展开,就会知道底层实现代码大致等效于
while (true) {
next = iter.next();
if (next.done) {
break;
}
value = next.value;
//... do sth with value....
//... 也就是执行for loop里面的内容...
}
可以看到,next.done的判断被JS解释引擎在代码执行区块之前。
事实上,这么做是一个人性化的设计。这样程序员写脚本时可以所有的返回都一股脑用yield,而不需要额外地将最后一个返回的元素用return。
- 1
savokiss
用for...of怎么获取不到最后return的那个值呢?