如何优化我的javascript代码?
我刚刚创建了一个javscript插件,它可以等待所有的图像。下面是我当前的源代码如何优化我的javascript代码?,javascript,jquery,garbage-collection,scope,Javascript,Jquery,Garbage Collection,Scope,我刚刚创建了一个javscript插件,它可以等待所有的图像。下面是我当前的源代码 $.fn.waitAllImages = function(options){ var defaults = { speed: 900 } var options = $.extend(defaults,options); var preloader = $("<div/>"); preloader.addClass('moonsPrel
$.fn.waitAllImages = function(options){
var defaults = {
speed: 900
}
var options = $.extend(defaults,options);
var preloader = $("<div/>");
preloader.addClass('moonsPreloader');
preloader.attr("id",options.id+"-preloader");
var hideWrapper = $("<div/>");
hideWrapper.attr("id",options.id+"-hide-wrapper");
hideWrapper.css("display","none");
$(this).wrapAll(hideWrapper);
$("body").append(preloader);
$(window).bind('load',function(){
$("#"+options.id+"-preloader").remove();
$("#"+options.id+"-hide-wrapper").eq(0).fadeIn(options.speed);
});
}
$.fn.waitAllImages=函数(选项){
var默认值={
速度:900
}
var options=$.extend(默认值,选项);
变量预加载程序=$(“”);
addClass('moonsPreloader');
preload.attr(“id”,options.id+“-preload”);
var hideWrapper=$(“”);
hideWrapper.attr(“id”,options.id+“-hide wrapper”);
css(“显示”、“无”);
$(this.wrapAll(hideWrapper);
$(“正文”).append(预加载程序);
$(窗口).bind('load',function(){
$(“#”+options.id+“-preload”).remove();
$(“#”+options.id+“-hide wrapper”).eq(0.fadeIn(options.speed);
});
}
它起作用了,但我有一个顾虑
如您所见,加载callback access options.id
$.fn.waitAllImages
和load callback是两个不同的函数。这是否意味着加载回调会阻止javascript garage collector清除options.id变量?垃圾收集详细信息是特定于实现的,但是是的,load
函数包含对options
变量的引用,因此它将在该函数的生命周期内可用
这在实践中很少是一个问题,但如果它困扰您,您可以传递所需值的副本:
$(window).bind('load', { id: options.id, speed: options.speed }, function(event){
$("#"+event.data.id+"-preloader").remove();
$("#"+event.data.id+"-hide-wrapper").eq(0).fadeIn(event.data.speed);
});
//谢谢你简单而详细的回答。是的,这在实践中很少是个问题。我想通过问一个只涉及很少变量的问题得到一个想法。我以前从未见过{id:options.id,speed:options.speed}函数(事件){}语法。谢谢你!!!有学问的也检查我的插件。@alex//哈哈,这很有趣。我有一个同事,他的名字也是亚历克斯。谢谢你的插件。我决定用你的。让我知道它对你有用:)