この記事では、匿名関数とは何か、またそれがもたらす利点については詳しく説明しません。まず、一般的に使用される匿名関数を取り上げます。
(function(){alert('yo')})()
Many Studentsこの種の無名関数の使い方は知っていますが、なぜこのように書くことで無名関数を呼び出せるのかは理解できないかもしれません。おそらく、次の括弧が前の関数を実行することは知っていても、その前の括弧が何を意味するかは知りません。この記事では、匿名関数のコード パターンの原則を理解します。
OK、まずは匿名関数呼び出しパターンを見てみましょう:
(function(){alert(1);}())
(function(){alert(2);})()
void function(){alert( 3);}( )
上記の 3 つは正しく、機能的には同等です。
間違った書き方を見てみましょう:
4.
function(){alert('yo')}()
上記のコードは構文エラーをスローします。これはなぜですか?この質問について、Qin Ge 氏の回答を見てみましょう。
1. 関数リテラル: まず関数オブジェクトを宣言してから、それを実行します。
2. 優先順位式: Javascript は括弧の内側から外側に向かって式を実行するため、括弧を使用して宣言された関数を強制的に実行できます。
3.void 演算子: void 演算子を使用して、かっこで囲まれていない単一のオペランドを実行します。
答えが正しいかどうかに関係なく、これらを脇に置いて、関数宣言の構文と関数式の構文を見てみましょう。
1. 関数宣言:
関数名([param[, param[, ... param]]] ) {
statements
}
ここでの関数名 name は省略できません。関数名を省略した場合はエラーとなります。
これは、
function(){alert('yo')}
を直接書くとエラーが発生する理由も合理的に説明しています。コンパイラはこれを関数宣言として扱い、関数名がコードに現れないため、結果は予測可能です。
2. 関数式:
関数[name ]([param] [, param] [..., param]) {
statements
}
関数名 name は省略可能です。 - 匿名関数と呼ばれます。明確にするために: 匿名関数を作成する必要がある場合は、関数の明示的な宣言ではなく関数式を指定する必要があります
これで、より正確な説明ができるようになります:
123 匿名関数のコード パターンは、以下にすぎません。括弧または void は、function(){} を関数式として解釈するようにコンパイラーに指示します。優先順位や無効演算子のような複雑な原則はありません。これは単純な構文変換にすぎません。
ご想像のとおり、関数式の構文に準拠している限り、
!!function(){
alert('yo')
}()
function(); {
alert(' yo');
}()
これ以上の謎はありません。関数宣言と関数の違いだけです。表現を理解していない場合は、物事を考えすぎて複雑にしすぎている可能性があります。
現在、JavaScript を学習するための特別な専門トレーニングやコースは用意されていません。コーディング能力の向上は、あなた自身の日々の実践と蓄積にかかっています。ただし、これが頻繁に発生するほど、最も基本的な知識が無視され、単純な問題が複雑になる可能性が高くなります。これはお勧めできません。 JavaScript を詳しく説明せずに、「使える」という態度で学習する学生もいますが、実際には、その能力はあまり向上しません。望ましくない!
詳細情報:
JavaScript 関数宣言を囲む括弧は何を意味しますか?