【发布时间】:2011-01-18 08:48:21
【问题描述】:
大家好,我正在做一个简单的预加载函数
(function($) {
$.fn.preload = function(settings) {
var config = {
before: function(){ return; },
end: function(){ return; },
after: function(a){ return; }
};
if (settings) $.extend(config, settings);
var limit = this.length - 1;
var counter = 0;
settings.before();
is_last_done = function(i){if (i == limit) return true;};
this.each(function(i, src){
$("<img>").attr("src", src).load(function(){
if( a == counter ) settings.after();
if(is_last_done(i)) settings.end(); // Last is done
counter++;
});
});
return this;
};
})(jQuery);
并调用它
img = ['a.jpg', 'b.jpg', 'b.jpg'];
a = 1;
$(img).preload({
before: function(){ return; },
end: function(){ },
after: function(a){
console.log('first done');
}
});
问题在于传递给“after()”函数的“a”变量没有被传递。
在插件内部,我可以使用 'a' 访问变量,就像在这一行中一样
if( a == counter ) settings.after();
'a' 是可用的,但是如果我想将 a 变量命名为别的东西怎么办?如何访问 after() 函数的参数?
如果我使用此代码,我的代码将不再工作
img = ['a.jpg', 'b.jpg', 'b.jpg'];
b = 1;
$(img).preload({
before: function(){ return; },
end: function(){ },
after: function(b){
console.log('first done');
}
});
b 没有通过,有什么想法吗?
谢谢
【问题讨论】:
标签: javascript jquery closures scope