Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何优化我的javascript代码?_Javascript_Jquery_Garbage Collection_Scope - Fatal编程技术网

如何优化我的javascript代码?

如何优化我的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

我刚刚创建了一个javscript插件,它可以等待所有的图像。下面是我当前的源代码

$.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//哈哈,这很有趣。我有一个同事,他的名字也是亚历克斯。谢谢你的插件。我决定用你的。让我知道它对你有用:)