yield
はJavaScriptでは 予約語 ではありませんが、ES6はそれをキーワードにします。
予約語のポイントは後方互換性のためだと思いました。たとえば、let
とconst
は予約されているため、ES5コードでこれらの単語を変数名として使用できませんでした。これにより、ES5コードがES6エンジンで正常に実行されるようになります。
...しかし、変数名としてyield
を使用した場合はどうなりますか?なぜこの言葉は予約されなかったのですか?そして、それが問題ではない場合、なぜany語が予約されたのですか?
ECMAScript 5では、yield
は厳密モード " Future Reserved Word ":
7.6.1.2将来の予約語
以下の単語は提案された拡張機能のキーワードとして使用されているため、それらの拡張機能の将来の採用の可能性を考慮して予約されています。
...
class enum extends super const export import
次のトークンは、ストリクトモードコード内で発生した場合もFutureReservedWordsと見なされます(10.1.1を参照)。 FutureReservedWordが発生するとエラーが発生するコンテキストで、厳密モードコード内にこれらのトークンが発生すると、同等のエラーも発生するはずです。
implements let private public yield interface package protected static
これは、厳密でないコードでは、懸念が正しいことを意味します。行の正確さvar yield = 5;
は、非厳密モードではES5とES6の実装で異なります。ただし、厳密モードでは、ES5とES6のどちらの場合も、この行は常に無効です。つまり、ES5コードの上位互換性を最大化するために、可能な場合は常に厳密モードを使用する必要があります。
why歩留まりが非厳密コード用に完全に予約されていなかったので、これはES3間の互換性をブリッジするために行われたと想定し、yield
をFutureReservedWord(14ページの ES3セクション7.5.3を参照 )。 yield
を導入するために、委員会は3から5への移行または5から6への移行のいずれかで互換性をどこかで破壊する必要がありました。ただし、ES3に含まれていた一部の予約語は、ES5では完全モード予約語にダウングレードされました。その決定の根拠はわかりません。