Как оптимизировать мой код JavaScript? - PullRequest
2 голосов
/ 03 мая 2011

Я только что создал плагин 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);
    });


}

Это работает, но меня беспокоит.

Как видите, загрузить callback access options.id. $.fn.waitAllImages и обратный вызов загрузки - две разные функции. Означает ли это, что обратный вызов load не позволяет гаражному сборщику javascript очистить переменную options.id?

1 Ответ

2 голосов
/ 03 мая 2011

Детали сборки мусора зависят от реализации, но да, ваша функция 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);
});
...