読者です 読者をやめる 読者になる 読者になる

javascriptでコールバック関数を渡すときに引数も渡したい場合

コールバックに指定する宣言済みの関数に引数を渡すと、指定時に実行されてしまう。

function foo(s) {
	alert("Hello " + s);
	return false;
}

// require jQuery
$(document).ready(function() {
	$(':button').click(foo('test'));
});
/* ページ読み込み後にアラートが表示されてしまい、クリック時に表示してくれない */

同様なことで解決した人も以下URLにいらっしゃるようで、

http://d.hatena.ne.jp/uriyuri/20081014/1223974862

上記URLのパターン1、パターン2で書いているように行う。パターン2のように

var foo = function(s) {
	return function() {
		alert("Hello " + s);
		return false;
	};
};

// require jQuery
$(document).ready(function() {
	$(':button').click(foo('test'));
});

のようにクロージャを使えば、コールバック指定時にいままでのように指定可能なようだ。
ただ、無理に引数を渡す必要がないのであれば外部変数を見るようにしてもいいかもしれない。

var s;
var foo = function() {
	alert("Hello " + s);
	return false;
};

// require jQuery
$(document).ready(function() {
	s = 'test';
	$(':button').click(foo);
});

使う場合、どちらがいいかその時に判断するべき。