Javascript 为什么必须在“yield”的场景中添加分号`
我在下面写了一个演示来演示这个问题 我希望生成器对变量Javascript 为什么必须在“yield”的场景中添加分号`,javascript,ecmascript-6,generator,Javascript,Ecmascript 6,Generator,我在下面写了一个演示来演示这个问题 我希望生成器对变量a进行迭代,但是,之后的冗余代码会影响它 有人能一步一步地弄清楚为什么会发生这种情况吗 我的代码是: function* foo(){ var a = 0, c while(a < 10){ a += 1 yield a //if the semicolon is added here, the final result is 1 [c] = [101] } }
a
进行迭代,但是,之后的冗余代码会影响它
有人能一步一步地弄清楚为什么会发生这种情况吗
我的代码是:
function* foo(){
var a = 0, c
while(a < 10){
a += 1
yield a //if the semicolon is added here, the final result is 1
[c] = [101]
}
}
var gen= foo()
console.log(gen.next().value) // [101]
函数*foo(){
变量a=0,c
而(a<10){
a+=1
产生一个//如果分号加在这里,最终结果是1
[c] =[101]
}
}
var gen=foo()
console.log(gen.next().value)//[101]
如果添加分号,代码实际上是产生一个;[c] =[101]代码>
所以你产生了a
和[c]=[101]代码>块不会影响实际返回值
否则,代码是产生a[c]=[101]代码>即[101]
:
函数*foo(){
变量a=0,c
而(a<10){
a+=1
收益率a[c]=[101];
}
}
var gen=foo()
console.log(gen.next().value)/[101]
添加分号将终止该语句。在没有分号的情况下,Javascript会执行下面的一行,从而生成[c]=[101]这就是为什么您应该养成在JS中用分号结束每个语句的习惯……这是编写自己的分号的原因之一,而不是依赖内置的纠错机制(自动插入分号)来完成这项工作。“……和[c]=[101];块实际上被忽略“只有当冗余存储被优化掉时。[c]=[101]
是有效的语句(不是“块”),这是一种写c=101
的迟钝方式。它被忽略的唯一原因是如果JavaScript引擎注意到c
从未被使用。@T.J.Crowderyield
不是会导致该语句的实际跳过吗?@Dekel,如果你再次调用该函数就不会了。@Dekel:好吧,它的发生次数与该语句的次数一样多ached;代码只是没有运行生成器直到完成。示例:它的调用次数将比您调用它的次数少1次。这是生成器的一个要点,如果在下一个下一个中停止,它将继续运行。。