関数定義方法、利用方法

社内勉強会用メモ

JavaScriptの関数定義と利用法は色いろある。

関数定義

C言語的感覚で使用できる、関数定義と呼び出し。

// 定義した関数の呼び出し
f();

// 関数定義
function f() {
	console.log('call f()');
}

関数リテラルで関数オブジェクトを生成

// 関数リテラルを使用して匿名関数を変数に格納
var g = function () {
	console.log('call g()');
};	// ←初期化付var文なので
	// セミコロンを忘れると誤動作することあり。注意。

// 変数経由で匿名関数呼び出し
g();

(匿名)関数式を利用し、即実行

グローバル領域を汚染しない。
カプセル化に利用したり、クロージャだけを取り出すために使ったり、
一番使いでがあるかもしれない。

// 関数リテラルを式として使い匿名関数を直接実行
(function () {
	console.log('direct call');
})();

関数コンストラクタ利用

使い方が難しく、書きにくい、読み易くない。
クロージャを形成しない点は注目点。
クロージャにしたくない場面なんてあるか?

var x = 'global';

(function () {
	var x = 'closure';
	
	return new Function('console.log("Function Constructor: x = " + x)');
})()();

(function () {
	var x = 'closure';
	
	return function () {
		console.log('Function literal: x = ' + x);
	}
})()();