2011-05-03 6 views
2

Я только что создал плагин javscript, который ждет всех изображений. Ниже приведен мой текущий исходный код.Как оптимизировать код javascript?

$.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); 
    }); 


} 

Это работает, но у меня есть проблема.

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

+0

Проверьте мой [waitForImages] (https://github.com/ alexanderdickson/waitForImages). – alex

+0

@alex // ха-ха, это смешно. У меня есть сотрудник, чье имя - алекс. Спасибо за плагин. Я решил использовать твою. – Moon

+0

Позвольте мне знать, что это работает для вас :) – alex

ответ

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); 
}); 
+0

// спасибо вам за простой, но подробный ответ. Да, на практике это редко бывает проблемой. Я хотел получить представление, задав вопрос, который включает в себя только несколько переменных. Я никогда не видел {id: options.id, speed: options.speed} function (event) {} синтаксис раньше. Спасибо вам за это!!! научился! – Moon

Смежные вопросы