関数宣言
関数代入式
名前付き関数の代入式
関数はJavaScriptのファーストクラスのオブジェクトであり、関数は他の値と同様に受け渡すことができることを意味します。一般的な使用法は、匿名関数をコールバック関数として非同期関数に渡すことです。
関数宣言
function foo() {}
上記のメソッドは実行前に解析(ホイスト)されるため、関数定義本体の上で呼び出された場合でも、現在のコンテキストのどこにでも存在します。
foo(); // 正常运行,因为foo在代码运行前已经被创建 function foo() {
関数代入式
var foo = function() {};
この例では、変数 foo に無名関数を代入します。
foo; // 'undefined' foo(); // 出错:TypeError var foo = function() {};
var は宣言文を定義しているため、変数 foo の解析はコードの実行前に行われるため、コードの実行時には foo 変数はすでに定義されています。
しかし、代入ステートメントは実行時にのみ実行されるため、対応するコードが実行される前に、foo の値はデフォルトで未定義になります。
名前付き関数の代入式
もう 1 つの特殊なケースは、名前付き関数を変数に代入することです。
var foo = function bar() { bar(); // 正常运行 } bar(); // 出错:ReferenceError
bar は、関数を foo に割り当てているため、関数宣言の外では見えませんが、bar 内ではまだ表示されています。これは、JavaScript の名前付け処理により、関数名は関数内で常に表示されます。
注: IE8 以下のブラウザでは、bar も外部から表示されます。これは、ブラウザが名前付き関数割り当て式を誤って解析し、それを 2 つの関数 foo と bar に解析するためです。
上記は JavaScript の上級シリーズです。関数の宣言と式の内容 さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。