2017-12-17 15 views
1

私はJavascriptで関数について学習していますが、関数宣言と関数式の使用については混乱しています。 関数宣言と関数式を同じ意味で使用できますか?

のは、私は次のコードがあるとしましょう:

function callFunction(fn) { 
    fn(); 
} 

// function expression 
var sayHello1 = function() { 
    console.log("Hello World!"); 
} 

// function declaration 
function sayHello2() { 
    console.log("Hello World!"); 
} 

callFunction(sayHello1); // Hello World! 
callFunction(sayHello2); // Hello World! 

我々は簡単にcallFunction(fn)sayHello1(関数式)とsayHello2(関数宣言)を通過するとき、両者が同じ出力Hello World!を生成することがわかります。

私はのみ機能宣言/関数式を使用する必要がありますか、私は同義的にそれらを使用することができますすべての時間を任意の実際のケースはありますか?

ありがとうございます!

答えて

2

両方ともユースケースがあります。関数の宣言は、スクリプトの先頭にhoistedであり、宣言の前に呼び出すことができます。関数の式は、宣言の後にのみ呼び出すことができます。

sayHello1(); // Won't work since variable expression is created after call 
sayHello2(); // Will work since function declarations are hoisted 

var sayHello1 = function() { 
    console.log("Hello World!"); 
} 

function sayHello2() { 
    console.log("Hello World!"); 
} 

という名前の関数式は、再帰呼び出しのために役立つことができます:

var sayHello1 = function sayHelloFunc() { 
    if (/* something */) { 
    sayHelloFunc() 
    } 
} 
関連する問題