抹桥的博客
Language
Home
Archive
About
GitHub
Language
主题色
250
340 文字
2 分
JavaScriptの関数式と関数宣言の違い
2015-02-09

JavaScriptにおける2つの関数定義方法:

関数式:#

var foo = function(){
	conlose.log('Message');
};

関数宣言:#

function foo(){
	console.log('Message');
};

どちらの方法でも同じ関数を定義できますが、いくつかの違いがあります。

関数式では:#

var fooは、一般的なvarで定義された変数と同様に、関数またはスクリプトの先頭に巻き上げられますが、関数本体は元の場所に留まります。そのため、関数本体の後に呼び出す必要があります。

var foo = function(){
	console.log('Message');
};
foo() 	// 出力結果は'Message'

foo();
var foo = function(){
	console.log('Message');
};		// TypeError: Property 'test' of object #<Object> is not a function というエラーになります

上記の2番目のコードは、実際には以下のコードと同じであるため、エラーが発生します。

var foo;
foo();
var foo = function(){
	console.log('Message');
};

関数宣言では:#

foo()関数の関数ブロック全体が、関数またはスクリプト全体の先頭に巻き上げられ、関数またはスクリプト全体で可視になります。つまり、関数定義の前に関数を呼び出すことができます。

foo()
function foo(){
	console.log('Message')
}			//出力結果は'Message'

今後、実際に使用する際には、両者の違いに特に注意してください。

JavaScriptの関数式と関数宣言の違い
https://blog.kisnows.com/ja-JP/2015/02/09/jsfunction-expression-declaration/
作者
Kisnows
公開日
2015-02-09
ライセンス
CC BY-NC-ND 4.0