■概要
functionで関数の宣言をし、returnを利用して結果を戻します。
function getSum(x, y) {
var sum = x + y;
return sum;
}
呼び出し時は下記のようにします。
getSum(5, 10);
■関数の範囲
JavaScriptは、関数の内部で宣言した変数を関数の外部で使うことができません。
また、関数内に関数を宣言することもできますが、同じく関数の外部で使うことはできません。
function testFunc() {
var testVar = 10;
return testVar;
}
console.log( testFunc() ); // 10
console.log( testVar); // undefined
function mainFunc() {
var mainVar = ‘a’;function subFunc() {
var subVar = ‘b’;
console.log(mainVar); // a
console.log(subVar); // b
}
subFunc();console.log(mainVar); // a
console.log(subVar); // undefined
}
mainFunc();
■first-class object
JavaScriptの関数はfirst-class object(citizen)で扱いされます。
first-class objectとは、以下の条件を満たすオブジェクトを示します。
JavaScriptは、関数もオブジェクトとして扱われるので、次のような宣言も可能になります。
var testFunc = function (x, y) {
return x + y;
};
// 関数を作って testFunc 変数に代入testFunc(3, 5);
下記のように関数で関数を返還することも可能になります。
function test(x) {
var inner = function(y) {
return x + y;
};
return inner;
}test(3)(4); // 7 返還
関数をオブジェクトのプロパティとして使うことも可能になります。
var prop = {
’age’: 20,
’run’: function() {
alert(‘run prop!’);
},
’bye’: function() {
alert(‘bye prop’);
},
};
■即時実行関数
JavaScriptでは、ネームスペースの概念がありません。
しかし、関数の範囲概念とfirst-class object概念を利用すると似たようなことが実装できます。
(function () {
var x = 10;
var y = 20;
console.log(x + y); // 30
})();console.log(x); // undefined
上記コードは、即時実行を可能とするものです。
上記のコードを分かりやすく書くと下記のようになります。
var nowFunc = (function() {
var x = 10;
var y = 20;
console.log(x + y); // 30
});
nowFunc();
変数に割り当てて再実行せず、即時に実行する方法です。
変数や関数を外部から使えなくしたり、衝突をしないようにするために使う方法です。
下記のような書き方もできます。
(function (b) {
b.getElementById(‘id’);
…
})(document.body);