ホームページ > ウェブフロントエンド > jsチュートリアル > JavaScript 上級シリーズ - 関数の宣言と式

JavaScript 上級シリーズ - 関数の宣言と式

黄舟
リリース: 2017-02-08 10:00:36
オリジナル
1174 人が閲覧しました
  • 関数宣言

  • 関数代入式

  • 名前付き関数の代入式


関数は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) に注目してください。


ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート