感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

JavaScriptの関数の勉強 その1

<スポンサーリンク>

JavaScriptパターンと、パーフェクトJavaScriptで勉強したことのまとめ ver.01

JavaScriptの関数

JavaScriptの関数の2つの特徴

  • 第一級のオブジェクトであること
  • スコープを提供すること

JavaScriptの関数はオブジェクトである、と。
それはどういうことなのか。見ていきたい。

関数Functionをコンストラクタによって作成する(=オブジェクトを作成する)

var multiply = new Function('a, b', 'return a * b');
// > undefined
multiply(3,4);
// > 12

たしかに、Function()コンストラクタから関数オブジェクトを作成できた。

次に、JavaScriptのスコープについてだが、JavaScriptにはJavaにあるような{}で囲んだローカルスコープは無い。
あるのは関数スコープだけである。

ifとかwhileのループで囲った変数も、その中のローカルスコープとはならない。
したがって、関数で囲んでない場合は、JavaScriptの変数はグローバル変数になる。

グローバル変数は最小限にすることが望ましいため、変数のスコープをちゃんと管理するには、関数を使うことが必至となる。

名前付き関数と無名関数

名前付き関数と無名関数の違いは以下のサンプルの通り。

//名前付き関数
var multiply = function multiple(a,b) {
	return a+b;
};

console.log(multiply(4,5));
// > 9

//名前付き関数ではnameプロパティに名前が入る
console.log(multiply.name)
// > multiple

//名前なし関数式(無名関数)
var multiply2 = function(a, b) {
	return a * b;
};

console.log(multiply2(6,7));
// > 42

//nameプロパティが空になる
console.log(multiply2.name)
// > undefined

即時関数

即時関数とは、関数を定義したらすぐにその関数を実行する構文である。
以下のサンプルのように、functionを定義した瞬間実行されている。

(function () {
	console.log("hoge!");
}());
// > hoge!

再利用の必要がない一回きりの変数を利用する際に、即時関数パターンが利用される。

(function() {
	var days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
	today = new Date();
	msg = 'Today is ' + days[today.getDay()] + ',' + today.getDate();
	console.log(msg);
}());
// > Today is Fri,26

勉強した本

JavaScriptパターン ―優れたアプリケーションのための作法

JavaScriptパターン ―優れたアプリケーションのための作法

感謝のプログラミング

今回で感謝のプログラミングは【544時間目】
10000時間まで、あと【9456時間】

Google App Engineの勉強した分も含める。