2

thisjavascriptのjavascriptジェネレーターの値は何ですか? 以下のコードでは、両方の比較で false が返され、 を実行すると , が空のよう.toSource()this見えますObject。ECMA または MDN ドキュメントへの参照は役に立ちますが、どちらにも何も見つかりませんでした。

function thisGenerator(){
    while(1)
        yield this;
}

var gen=new thisGenerator();
alert(gen.next()==thisGenerator);
alert(gen.next()==gen);
4

1 に答える 1

1

thisそれでも通常のルールに従います。考慮して、グローバルスコープはwindow次のとおりです。

var gen = (function() { yield this; })(); gen.next() === window // true
var gen = (function() { "use strict"; yield this; })(); gen.next() === undefined // true

quirks モードでthisは、バインドされていない関数はグローバル スコープ (たまたまwindow) になりますが、strict モードではundefinedです。

PS: バインドされた関数を呼び出す場合、すべては通常どおりです。

var o = { foo: function() { yield this; } }; o.foo().next() === o // true
var o = {}; function foo() { yield this; }; foo.call(o).next() === o // true
于 2013-08-13T22:37:10.743 に答える