如何优化我的JavaScript代码?

时间:2011-05-03 04:19:24

标签: javascript jquery garbage-collection scope

我刚刚创建了一个等待所有图像的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);
    });


}

它有效,但我有一个问题。

如您所见,加载回调访问选项.id。 $.fn.waitAllImages和加载回调是两个不同的功能。这是否意味着加载回调会阻止javascript车库收集器清除options.id变量?

1 个答案:

答案 0 :(得分:2)

垃圾收集详细信息是特定于实现的,但是您的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);
});