JavaScript言語の抽出関数


すべての過失が犯されない前に、処罰すべきJavaScriptの中で最も良い特性は関数の実現であり、ほとんどできないことはないが、関数はJavaScriptの中でも万能薬ではないことも予想できるだろう.関数には、JavaScriptのベースモジュールユニットであり、コード多重化、関数用語指定オブジェクトを呼び出す動作の非表示、組み合わせに使用される文のセットが含まれています.一般的に、プログラミングとは、関数と関数構造のセットに需要を分解するスキルです.
かんすうめんりょう
関数オブジェクトは、関数の数の面量で作成できます.

var add = function (a,b) {
	return a + b;
}

var myObject = {
	value:0;
	increment:function(inc) {
		this.value += typeof inc == 'number' ? inc : 1;
	}
}
myObject.increment();
document.writeln(myObject.value); //1

myObject.increment(2);
document.writeln(myObject.vale); // 3

各関数オブジェクトは、constructorプロパティを持ち、値が関数のオブジェクト呼び出し演算子が関数値を生成する式の後に続くカッコのペアであるprototypeプロパティも作成時に付属します.カッコ内には、カンマで区切られた0つ以上の式が含まれ、各式はパラメータ値を生成し、各パラメータ値は関数宣言時に定義された形式パラメータ名を付与します.実際のパラメータ(arguments)の個数が形式パラメータ(parameters)の個数と一致しない場合、実行時エラーは発生しません.実際のパラメータ値が多すぎると、超えたパラメータ値は無視されます.実際のパラメータ値が少なすぎると、欠落した値がundefinedに置き換えられます.パラメータ値はタイプチェックされず、任意のタイプの値がパラメータに渡されます.New接頭辞呼び出しの関数をコンストラクタ関数と呼ぶ.約束に従って、大文字で命名された変数に保存されます.
パラメータ
関数が呼び出されると、関数宣言定義の形式パラメータに割り当てられていない余分なパラメータを含むすべての呼び出し時に渡されるパラメータリストにアクセスできるarguments配列という無料のパラメータが得られます.これにより、パラメータの個数を指定する必要のない関数を記述することが可能になります.
<script language="javascript" type="text/javascript">
	 var sum  = function(){
  		var i ,sum =0;
		for (i = 0; i < arguments.length;i++) {
			sum += arguments[i];
		}
		return sum;
 	};
 alert(sum(12,8));// 20

言語の設計が間違っているため、argumentsは本当の配列ではありません.これは「類似配列」のオブジェクトにすぎません.Argumentsにはlengthプロパティがありますが、すべての配列メソッドが欠けています.
関数の戻り値
関数は常に値を返します.戻り値が指定されていない場合は「undefined」を返す.関数がnew接頭辞を前に付けて呼び出され、オブジェクトでない場合はthis(新しいオブジェクト)を返します.
      
  function a() {
	  document.writeln("a");
	}
	
	alert(a()); // undefined
	alert(new a()); //[object Object]


	 var bb = function a () {
 		alert("bb");
	  }();  //   ()alert("bb");

	  function a() {
		alert("bb");
	  }();   //   

関数例外
JavaScriptは一連の異常処理メカニズムを提供する
<script   language="javascript"  type="text/javascript">
var add = function(a,b) {
   if (typeof a != 'number'|| typeof b!= 'number') {
   		throw {
			name :'TypeError',
			message:'add needs numbers'
		};
		return a+ b;
   }
}
var  try_it = function () {
 try {
 	add('seven');
 }catch (e) {
    document.writeln(e.name+':'+e.message)
 }
} 
try_it(); // add needs number
</script>

tryコードブロック内に例外が投げ出されると、制御権はそのcatchにジャンプし、文のtry文コードブロックからすべての例外をキャプチャするcatchコードブロックが1つしかありません.処理手段が例外タイプに依存する場合、例外プロセッサは例外オブジェクトのnameプロパティをチェックして例外タイプを決定する必要があります.
クローズドパッケージ
var myObject = function () {
	var value = 0;
	return {
		increment:function (inc) {
			value += typeof inc =='number'?inc:1;
		},
		getValue:function () {
			return value;
		}
	}
}();//     

最後の行(よく他の人のコードを見る)に注意してください.私たちはmyObjectに関数を割り当てていません.私たちは関数を呼び出して戻った結果を割り当てています.注意後の行();この関数は、2つのメソッドを含むオブジェクトを返し、value変数にアクセスする権限を継承します.
var quo = function (status) {
	return {
		get_status:function () {
			return status;
		}
	};
}
var myQuo = quo ("amazed") ;
alert(myQuo.get_status());//amazed

このquo関数はnewを前に付ける必要がないように設計されているので、名前も頭文字の大文字がなく、quoを呼び出すとgetを含むstatusメソッドの新しいオブジェクトです.このオブジェクトの参照はmyQuoに保存されます.quoが戻ってもget_statusメソッドは、quoオブジェクトのstatusプロパティにアクセスする権限を依然として有します.get_statusメソッドは、パラメータのコピーにアクセスするのではなく、そのパラメータ自体にアクセスします.これは、関数が作成されたコンテキスト環境にアクセスできるためです.これを閉パッケージと呼ぶ.
コールバック
モジュール
カスケード
セット
メモリー