web-dev-qa-db-ja.com

JavaScript関数定義の構文

可能性のある複製:
JavaScript:var functionName = function(){} vs function functionName(){}
JavaScriptで関数を宣言

JavaScriptで関数を定義するための2つの異なる構文を見てきました。

function f() {
   ...
}

と同様

var f = function() {
    ...
};

これらの違いは何ですか?それらの1つは非推奨ですか?

44
CaptainCodeman

どちらも非推奨ではなく、両方とも機能します。ここでの違いは、一方が名前付き関数(function f())であり、もう一方が関数に等しい変数(var f = function())であることです。

関数と等しい変数を設定するときは注意する必要があります。これは動作します:

var f = function(n) { console.log(n); };
f(3); // logs 3

しかし、変数の呼び出し後に変数が定義されているため、これは壊れます。

f(3); // what is f? breaks.
var f = function(n) { console.log(n); };

ただし、通常の機能は正常に機能します。

function abc(n) { console.log(n); }

abc(3); // logs 3
xyz(5); // logs 5

function xyz(n) { console.log(n); }

これは、実行前にコードが分析され、すべての関数を呼び出すことができるためです。ただし、varを関数に設定することは、varを他の値に設定するようなものです。発生する順序は重要です。

さらに混乱を招くものについては...

「自己実行」匿名関数もあります。彼らはさまざまな名前で行きます。最も一般的な方法は次のようになります。

(function() {
    // code in here will execute right away
    // since the () at the end executes this (function(){})
})();

間違いなくより良いバージョンもあります。

!function() {
    // again, the tailing () will execute this
}();

匿名関数の詳細については、 このStack Overflow post をご覧ください。

46
Marshall