【问题标题】:How to optimize my javascript code?如何优化我的 JavaScript 代码?
【发布时间】:2011-05-03 04:19:23
【问题描述】:

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


}

它有效,但我有一个顾虑。

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

【问题讨论】:

  • 检查我的waitForImages 插件。
  • @alex // 哈哈,这很有趣。我有一个同事,他也叫亚历克斯。谢谢你的插件。我决定用你的。
  • 让我知道它对你有用 :)

标签: javascript jquery garbage-collection scope


【解决方案1】:

垃圾收集细节是特定于实现的,但是是的,您的 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}function(event){} 语法。谢谢你!学习了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-13
  • 2014-12-31
  • 2012-04-24
  • 1970-01-01
  • 1970-01-01
  • 2015-11-08
  • 1970-01-01
相关资源
最近更新 更多