ホームページ >ウェブフロントエンド >jsチュートリアル >Javascript_javascript スキルの中括弧 '{}' のあいまいさを解析する
JS の中括弧には 4 つの意味関数があります
セマンティクス 1、複合ステートメントを整理します。これは最も一般的なものです
セマンティック 3、関数または関数リテラルを宣言
var c = {}.constructor;
と同じ状況var fn = function(){}()、エラーは報告されません。
実際に問題を引き起こしているのは js の「ステートメントの優先順位」です。つまり、{} はオブジェクト リテラル (セマンティック 2) や宣言された関数のセマンティックではなく、複合ステートメント ブロック (セマンティック 1) として理解されます。 (意味3)。
function(){}()、中括弧は複合文として理解されます。当然、前の function() 宣言関数の構文は不完全であるため、構文解析中にエラーが発生します。
{}.constructor では、中括弧は複合ステートメントとして理解され、中括弧の後にドット演算子が続きます。ドット演算子の前に適切なオブジェクトがない場合は、当然エラーが報告されます。
(function(){})(), (function(){});//強制的に関数として理解される (意味論 3)、「Function ()」は関数の実行を意味します。つまり、関数は宣言の直後に実行されます。
({}).constructor //({}) は、中括弧をオブジェクト リテラルとして強制的に解釈します (意味 2)。「Object.xx」は、当然のことながら、オブジェクトのメンバーを取得することを意味します。以下のドット演算子は正常に実行できます。