『JavaScript 高度なプログラミング』第 7 章 関數(shù)、関數(shù)宣言の促進(jìn)に関して、次のような例があります。 リーリー
この本の原文には次のように書かれています:
表面上、上記のコードは、條件が true の場合は、sayHi() の 1 つの定義を使用し、それ以外の場合は、別の定義を使用することを意味します。実際、これは ECMAScript では無効な構(gòu)文であり、JavaScript エンジンはエラーを修正して適切な狀態(tài)に変換しようとします。しかし問題は、ブラウザがエラーを修正しようとする試みが一貫していないことです。ほとんどのブラウザは條件を無視して 2 番目のステートメントを返しますが、Firefox は條件が true の場合に最初のステートメントを返します。したがって、この使用法は危険であるため、コード內(nèi)で使用しないでください。しかし、chrome と js bin でテストし、條件を true に変更したところ、「Hi」というアラートが得られ、本に書かれている「ほとんどのブラウザは 2 番目のステートメントを返し、條件を無視する」というような問題は発生しませんでした。 、どうしてこれなの:### リーリー
アドバイスをお願いします、ありがとうございます!
true は変數(shù)ではなくリテラルです。ブラウザは、次のように、解析時に if ステートメントを直接最適化します。 リーリー
ただし、著者は別の狀況について言及していますリーリー
コンパイラーがこのコードを取得すると、同じスコープ內(nèi)に重複する関數(shù)宣言が 2 つあることがわかり、最初の宣言は 2 番目の宣言に直接置き換えられます。
js では、ブロック內(nèi)で関數(shù)を宣言することはお勧めしません。
厳密モードでは、このコードはエラーを直接報告します。