为什么我应该在自包含函数中引用jQuery?

Ben*_*enR 15 javascript jquery

(function ($, undefined) {

    . . .

})(jQuery);
Run Code Online (Sandbox Code Playgroud)

我到处都看到了这一点,但我不明白为什么我们将jQuery作为参数发送到自包含的函数中.jQuery已被引用.另外,为什么我们定义undefined为参数?

Ben*_*enM 16

传递$给匿名函数可确保命名空间受到保护(即不会与也使用$快捷方式的其他库冲突).

通常,undefined传递给函数以确保变量是真实的undefined.例如,请考虑以下代码exerpt:

undefined = '123';
if(myVar == undefined)
{
    // Will only ever execute if myVar == '123'
}
Run Code Online (Sandbox Code Playgroud)

正如评论中所指出的,除非您正在编写插件或类似插件,否则使用jQuery(function($) { })可能是一种更好的方法,因为它可以保护$快捷方式并提供DOMReady事件,这意味着需要更少的代码来实现相同的结果.

如果您需要检查undefined,您可能还需要考虑使用$.noop().

  • 如今,符合ES5标准的浏览器不允许覆盖全局`undefined`.无论如何,即使在考虑旧浏览器时,覆盖全局的"未定义"通常也会表明一些严重的问题,这些问题在理智的环境中是不允许的. (2认同)