SQLの窓 イラストAC フリー素材

2013年10月15日

JS : function() {} という『無名の処理』の理解

JavaScript は結構難解な言語です。ですが、これだけは押さえて置かなければなりません。

まずはサンプル
<input type="button" id="target" value="ボタンのイベント">
<script type="text/javascript">

document.getElementById("target").addEventListener(
	"click",
	function(){
		alert("こんにちは");
		setTimeout(
			function(){
				alert("3秒後");
			},
			3000
		);
	}
);

</script>

このコードで表示されるボタンをクリックすると、まず『こんにちは』とメッセージボックスが表示されて、それを閉じた3秒後に再びメッセージボックスで『3秒後』と表示されます

通常の認識では、addEventListener ではイベントを登録し、setTimeout では処理を書くようになっている所に、いずれも function() {} という『無名の処理』が記述されて、正しく動作します。

さらに、『無名』ではありますが、名前を使わずに記述そのものを実行する手段も存在します( Windows8 のストアアプリの JavaScript 版ではいきなりこんなのが出て来ます )
<input type="button" id="target" value="ボタンのイベント" onclick="test();">
<script type="text/javascript">

function test() {

	(function(){alert("こんにちは");}) ();

}

</script>


こうなると、C言語的には完全に関数のポインタで、C# 的にはデリゲートで、C# では function() {} のかわりに () => {} というラムダ式を使う事になります。とにかく、function() {} だけでは実行のされないブロックが定義されるだけで、それを実行するにはそれなりの場所へ記述する事になります。これらはインラインとか、インナーとかで表現されるもので、本来定義しておいて名前を付けて後で使うという処理を手っ取り早く『その場で使う』為の記法です。

という前提で jQuery の $(function(){}); を考えるといいと思います。

 jQuery を試すには


関連する記事


【JavaScriptの最新記事】
posted by at 2013-10-15 00:06 | JavaScript | このブログの読者になる | 更新情報をチェックする