jQueyのajax()関数で、success関数に引数を渡す方法はクロージャー

jQueryのajax()関数で、successの関数に引数を渡したい。
以下の用に無名関数とか書いちゃえばいいんだけど、スコープが広くりすぎるとなにか気持ち悪い。
そんなときはクロージャがいいな。

var Hoge = {
	fuga : function(url,id){
		$.ajax({
			dataType : 'json',
			url : "hogehoge",
			context : this,
			success : function(json,status,xhr){
				this.uga(id,json,status,xhr);
			}
		});
	},
	uga : function(id,json,status,xhr){
		alert(id);
	}
}

ちゃんと調べてないのですが、たぶんsuccessが実行されるまで変数urlなどへの参照を保持する必要があり微妙にメモリを食いそう。
それよりなによりクロージャーを使えば以下のとおりすっきりできました。
可読性がいい。

var Hoge = {
	fuga : function(url,id){
		$.ajax({
			dataType : 'json',
			url : "hogehoge",
			context : this,
			success : uga(id)
		});
	},
	uga : function(param_id){
		var id = param_id;
		return function(json,status,xhr){
			alert(id);
		};	
	}
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です