var functionName = function(){} 対 function functionName(){} [Javascript]

このエントリーをはてなブックマークに追加

質問:

最近他人のJavascriptのコードをメンテしだして、バグを修正したり、機能を追加したり、コードをきちんと整理して一貫するようにしてる。

で、前の開発者は関数を宣言するのに2つの方法を使用してて、これらを使い分けるのに理由があるのかどうかよくわからないんだけど。その2つの方法は:

var functionOne = function() {
// 何かのコード
};
function functionTwo() {
// 何かのコード
}

この2つの異なる方法を使用する理由って何?それぞれメリットデメリットってある?
もう片方ではできて、他では出来ないことってある?

By Richard Garside | 質問日時: 2008年12月3日 11:31



回答1:

The difference is that functionOne is a function expression and so only defined when that line is reached, whereas functionTwo is a function declaration and is defined as soon as its surrounding function or script is executed (due to hoisting).
For example, a function expression:

functionOneは関数式なので、その行に達すると定義されるけど、 一方でfunctionTwoは関数宣言なので、その周囲の関数またはスクリプトが実行されたら定義される(ホイストによる)。

たとえば、関数式は次のようになる。

// TypeError:undefinedは関数ではない
functionOne();
var functionOne = function() {
console.log("Hello!");
};

で、関数宣言:

// 出力: "Hello!"
functionTwo();
function functionTwo() {
console.log("Hello!");
}

これは、関数宣言を使って条件付きで関数を定義することもできないことを意味してる:

if (test) {
//エラーまたは不正行為
function functionThree() { doSomething(); }
}
上は `test`の値にかかわらず` functionThree`を実際に定義してる -- でも`use strict`が有効でない限り、エラーが発生してしまう。

By Greg | 回答日時: 2008年12月3日 11:37



Source: var functionName = function() {} vs function functionName() {}

共有 コメント