javascript - Elevation での関数宣言の例との混同
淡淡烟草味
淡淡烟草味 2017-06-26 10:50:47
0
2
662

『JavaScript 高度なプログラミング』第 7 章 関数、関数宣言の促進に関して、次のような例があります。 リーリー

この本の原文には次のように書かれています:

表面上、上記のコードは、条件が true の場合は、sayHi() の 1 つの定義を使用し、それ以外の場合は、別の定義を使用することを意味します。実際、これは ECMAScript では無効な構文であり、JavaScript エンジンはエラーを修正して適切な状態に変換しようとします。しかし問題は、ブラウザがエラーを修正しようとする試みが一貫していないことです。ほとんどのブラウザは条件を無視して 2 番目のステートメントを返しますが、Firefox は条件が true の場合に最初のステートメントを返します。したがって、この使用法は危険であるため、コード内で使用しないでください。

しかし、chrome と js bin でテストし、条件を true に変更したところ、「Hi」というアラートが得られ、本に書かれている「ほとんどのブラウザは 2 番目のステートメントを返し、条件を無視する」というような問題は発生しませんでした。 、どうしてこれなの:### リーリー

アドバイスをお願いします、ありがとうございます!

淡淡烟草味
淡淡烟草味

全員に返信(2)
为情所困

true は変数ではなくリテラルです。ブラウザは、次のように、解析時に if ステートメントを直接最適化します。 リーリー

ただし、著者は別の状況について言及しています

リーリー

いいねを押す +0
三叔

コンパイラーがこのコードを取得すると、同じスコープ内に重複する関数宣言が 2 つあることがわかり、最初の宣言は 2 番目の宣言に直接置き換えられます。
js では、ブロック内で関数を宣言することはお勧めしません。
厳密モードでは、このコードはエラーを直接報告します。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート