关于生成器函数send()javascript

时间:2016-01-21 10:26:50

标签: javascript ecmascript-6

我在Mozilla Dev页面中查看生成器功能。

有一个示例代码具有 send()功能。

function* fibonacci() {
  var a = yield 1;
  yield a * 2;
}

var it = fibonacci();
console.log(it);          // "Generator {  }"
console.log(it.next());   // 1
console.log(it.send(10)); // 20
console.log(it.close());  // undefined
console.log(it.next());   // throws StopIteration (as the generator is now closed)

但是,chrome和Firefox(最新版本)都在send()函数上抛出错误。

对此有何看法?它不受支持吗?

2 个答案:

答案 0 :(得分:2)

.sendLegacy generator objects的一部分,它们特定于SpiderMonkey引擎。 It will be removed in some future release。他们已经开始在部分代码中使用ES6生成器删除/替换旧版生成器对象(Bug 1215846Bug 1133277

目前您仍然可以在Firefox中使用旧版生成器(截至此答案的当前版本:43.0.4)。在定义时只需忽略*,只要函数体使用yield语句,就会使用旧版生成器。

function fibonacci() {
  var a = yield 1;
  yield a * 2;
}

var it = fibonacci();
console.log(it);          
console.log(it.next());   
console.log(it.send(10)); 
console.log(it.close());  
console.log(it.next());

答案 1 :(得分:-1)

有趣的是,在ESNext中可能是function.sent()

var result;
function* generator() {
  result = function.sent;
}
var iter = generator();
iter.next('tromple');
return result === 'tromple';

https://github.com/allenwb/ESideas/blob/master/Generator%20metaproperty.md