Javascript 2种编写jquery的方式,what';有什么区别?

Javascript 2种编写jquery的方式,what';有什么区别?,javascript,jquery,Javascript,Jquery,我有一个函数,里面有一些简单的表达式,添加NUM,附加DOM,等等。 因为我只需要调用它一次,所以一个匿名函数就可以做到。但是我应该选择哪种方式,有什么区别呢 1:document.ready(){}的缩写我经常看到这个 $(function(){ var something; ++something; }); 2:在jquery插件中找到。它也绑定到$(document).ready()了吗 不,不是,只是个速记 不,不是。这段代码确保$jQuery是真正的jQuery,而不

我有一个函数,里面有一些简单的表达式,添加NUM,附加DOM,等等。 因为我只需要调用它一次,所以一个匿名函数就可以做到。但是我应该选择哪种方式,有什么区别呢

1:document.ready(){}的缩写我经常看到这个

$(function(){
    var something;
    ++something;
});
2:在jquery插件中找到。它也绑定到$(document).ready()了吗

  • 不,不是,只是个速记

  • 不,不是。这段代码确保$jQuery是真正的jQuery,而不仅仅是另一个javascript库

  • 不,不是,只是个速记

  • 不,不是。这段代码确保$jQuery是真正的jQuery,而不仅仅是另一个javascript库


  • 首先

    这只是速记

    您正在沙箱化
    $
    的使用,以减少与使用
    $
    速记的其他库的冲突

    $
    只是
    jQuery
    变量的快捷方式,并被传递到立即调用函数的内部函数中

    范例

    var outerVar = "something";
    
    (function innerFunc(passedVar) {
    
        passedVar === "something"; //true
    
    })(outerVar);
    

    执行
    innerFunc
    ,并将
    outerVar
    作为其参数传递。

    首先

    这只是速记

    您正在沙箱化
    $
    的使用,以减少与使用
    $
    速记的其他库的冲突

    $
    只是
    jQuery
    变量的快捷方式,并被传递到立即调用函数的内部函数中

    范例

    var outerVar = "something";
    
    (function innerFunc(passedVar) {
    
        passedVar === "something"; //true
    
    })(outerVar);
    

    innerFunc
    被执行并作为参数传递给
    outerVar

    在第一个示例中,速记形式在功能上与
    $(document).ready()相同

    第二个例子是立即调用的匿名函数(感谢@Raynos的更正:这通常称为自调用函数;它不是一个)。该函数以
    jQuery
    为参数,就地定义和执行。这种方法的一个优点是,在函数内声明的变量不会“污染”全局(窗口)范围(例如,与在函数外运行代码相反)。在您的示例中,
    函数外部未定义某个

    由于
    jQuery
    作为参数
    $
    引入函数中,
    $
    保证是该函数体中的jQuery,即使其他库在函数外部使用
    $

    一个有用的补充说明:有时命名“匿名”函数很有帮助。功能保持不变,但名称可以使调试复杂代码变得更容易

    (function superFunction (foo) { // naming this "superFunction"
        var something = 10;
        do_something_with( foo, something );
    })(bar);
    

    在第一个示例中,速记表单在功能上与
    $(document).ready()
    相同

    第二个例子是立即调用的匿名函数(感谢@Raynos的更正:这通常称为自调用函数;它不是一个)。该函数以
    jQuery
    为参数,就地定义和执行。这种方法的一个优点是,在函数内声明的变量不会“污染”全局(窗口)范围(例如,与在函数外运行代码相反)。在您的示例中,
    函数外部未定义某个

    由于
    jQuery
    作为参数
    $
    引入函数中,
    $
    保证是该函数体中的jQuery,即使其他库在函数外部使用
    $

    一个有用的补充说明:有时命名“匿名”函数很有帮助。功能保持不变,但名称可以使调试复杂代码变得更容易

    (function superFunction (foo) { // naming this "superFunction"
        var something = 10;
        do_something_with( foo, something );
    })(bar);
    
    发件人:

    但是等等!我所知道和喜爱的令人敬畏的美元符号在哪里?它是 不过,为了确保你的插件不会发生冲突,仍然存在 对于其他可能使用美元符号的图书馆来说,这是最好的选择 将jQuery传递给一个自动执行函数(闭包)的实践 将其映射到美元符号,这样它就不会被其他符号覆盖 在其执行范围内的库

    发件人:

    但是等等!我所知道和喜爱的令人敬畏的美元符号在哪里?它是 不过,为了确保你的插件不会发生冲突,仍然存在 对于其他可能使用美元符号的图书馆来说,这是最好的选择 将jQuery传递给一个自动执行函数(闭包)的实践 将其映射到美元符号,这样它就不会被其他符号覆盖 在其执行范围内的库


    把这两种风格结合起来就行了

    jQuery(function($) {
      // uses the real jQuery as $
      // code
    });
    
    第一种样式用于在DOM就绪时运行一些代码


    第二种样式用于确保
    $==jQuery
    ,并使
    $
    成为局部变量(将查找时间减少一小部分)

    只需将这两种样式组合起来即可

    jQuery(function($) {
      // uses the real jQuery as $
      // code
    });
    
    第一种样式用于在DOM就绪时运行一些代码

    第二种样式用于确保
    $==jQuery
    ,并使
    $
    成为局部变量(将查找时间减少一小部分)

    第二种样式不绑定到
    就绪
    事件

    详细地说。这:

    $(function(){  /* ... */ });
    
    需要定义变量
    $
    。通常,当jQuery被加载并指向jQuery函数时,这个变量就存在了

    随后,当您使用函数参数调用jQuery函数时,jQuery将此函数参数绑定到
    ready
    事件。以上相当于

    jQuery(function(){  /* ... */ });
    
    这反过来又是一个方便的简写

    jQuery(document).ready(function(){  /* ... */ });
    

    您的第二个代码段

    (function ($) { /* ... */ })(jQuery);
    
    不依赖于定义
    $
    或指向
    jQuery()
    (如果并行加载多个JS框架,则可能发生这种情况)

    为了在特定的代码区域内仍能方便地使用
    $