关于生成器函数send()javascript

Vin*_*ino 5 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)
Run Code Online (Sandbox Code Playgroud)

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

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

Pat*_*ans 2

.send是特定于 SpiderMonkey 引擎的旧版生成器对象的一部分。它将在未来的某个版本中删除。他们已经开始在部分代码中使用 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());
Run Code Online (Sandbox Code Playgroud)