Поместите функцию, возвращающую функцию и параметризованную как i
вне цикла.JSLint будет поощрять вас делать это в любом случае, и некоторые могут найти его более читабельным при загрузке.
function make_fn1(i) {
return function() { $("#shader").show(); $("#thumbInfo"+i).show(); };
}
function make_fn2(i) {
return function() { $("#shader").hide(); $("#thumbInfo"+i).hide(); };
}
for (var i = 0; i < sites.length ; i++)
{
$("#thumb"+i).click(make_fn1(i));
$("#thumbInfo"+i+" .xbutton").click(make_fn2(i));
}
Однако это может быть устранено другими способами.Для начала, если вы используете jQuery, $("#shader, #thumbInfo"+i).show();
более лаконичен.Более того, в текущем коде понятие о том, что две функции либо скрывают, либо показывают одинаковые два элемента, не учитывается, поэтому может быть
function make_fn (i,showhide) {
return function() { $("#shader, #thumbInfo"+i)[showhide]() };
}
for (var i = 0; i < sites.length ; i++)
{
$("#thumb"+i).click(make_fn(i,'show'));
$("#thumbInfo"+i+" .xbutton").click(make_fn(i,'hide'));
}