为什么必须在`yield`的场景中添加分号

Pag*_*eYe 2 javascript generator 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]

    }
}

var gen= foo()
console.log(gen.next().value) // [101]
Run Code Online (Sandbox Code Playgroud)

Dek*_*kel 5

如果添加分号,则代码实际上是 yield a; [c] = [101];

所以,你yielda[c] = [101];块不会影响实际的返回值.

否则,代码yield a[c] = [101];[101]:

function* foo(){
    var a = 0, c
    while(a < 10){
        a += 1
        yield a[c] = [101];

    }
}

var gen= foo()
console.log(gen.next().value) // [101]
Run Code Online (Sandbox Code Playgroud)