我试图从ES7规范中找到它,但是找不到精确的东西。可以简单地将yield
用作变量名。我的意思是
var yield;
语法错误?我做了一个简单的测试:
var a;
try{eval('var yield')}catch(b){a=1}
console.log(!a);
我在Chrome和Node.js(都使用v8引擎)中进行了尝试,并显示了
true
。但是,在Firefox中它显示false
。据我所知,Firefox支持生成器功能和其他ES7东西,但其行为有所不同。是否取决于实现,还是Chrome或Firefox错误?
附言我问这个问题是因为我正在编写JavaScript模糊处理程序,所以我很想知道是否可以利用此功能。
最佳答案
yield
是ES7中的保留字。但是在该语言的过时版本中是允许的。因此,禁止将yield
用作标识符仅限于严格模式。
因此,这将产生一个错误:
"use strict"
var yield = true;
console.log(typeof yield);
这可以在不中断网络的情况下起作用:
var yield = true;
console.log(typeof yield);
在当前自动更新的Firefox和Chrome版本中,这些测试的行为相同,因此我不确定您检测到的差异是如何产生的。 Firefox 53.0.2为发布的代码生成一个
true
结果。1个
关于
yield
保留字的更多历史记录。第7.5.2节(当前)或7.5.3节(保留未来)中未保留ES3
ES5作为将来的保留字引入,要求在严格模式下将错误作为标识符(第7.6.1.2节)
ES6和ES7均在11.6.2.1节中将yield声明为保留字,并注意在严格模式(第12.1.1节)之外,允许将其用作标识符,而不会出现错误。