関数定義方法、利用方法
社内勉強会用メモ
JavaScriptの関数定義と利用法は色いろある。
関数リテラルで関数オブジェクトを生成
// 関数リテラルを使用して匿名関数を変数に格納 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); } })()();