【问题标题】:Why use 'undefined' as 2nd parameter in a jQuery function? [duplicate]为什么在 jQuery 函数中使用“未定义”作为第二个参数? [复制]
【发布时间】:2013-05-20 00:30:02
【问题描述】:

我在 jQUery UI 源代码https://github.com/jquery/jquery-ui/blob/master/ui/jquery.ui.button.js 中看到了这个范围封装,未定义的值作为第二个参数。当我正在编写一个 jquery ui 插件时,我想知道在参数中设置 undefined 有什么好处?

(function( $, undefined ) {
//...
}( jQuery);

【问题讨论】:

  • 好问题!我也一直在想这个。
  • 它用于确保未定义确实意味着未定义,即如果在代码中的某处错误 undefined = abc( 被分配了一个值) 那么它将呈现所有那些 if(something === undefined)没用,因为那样您将与 abc 进行比较,而不是未定义。这样,undefined 是真正的 undefined,因为调用时 (function ($, undefined){...}(jQuery);' $ 被赋值为 jQuery 但 undefined 从未被赋值。

标签: javascript jquery jquery-ui


【解决方案1】:

这样做是为了有一个指向“真实”undefined 值的指针。

一般来说,在 JavaScript 中,您甚至可以修改存储在 undefined 下的值,这反过来又会破坏它的许多用例。

undefined = 'abc';
var obj = { prop: 'abc' };

if ( obj.prop == undefined ) {
  // do something
  // this is actually called despite the fact, that the property is set!
}

编辑

正如@Christoph 在 cmets 中提到的,这也有助于在使用压缩器时减少代码大小。这里本地的undefined 被视为一个常用变量,可以将其缩小为例如a,从而减少代码大小。

【讨论】:

  • 这就是你使用typeof obj.prop === 'undefined'的原因。
  • htm5 将其定义为只读。大多数现代浏览器都遵守这一点。更相关的原因是,作为变量名,它可以缩小为单个字母。
  • @DJDavid98 你仍然可以在旧版浏览器中覆盖undefined
  • 这并不完全正确,因为它取决于 ECMA 脚本的实现而不是“HTML5”(从 ECMAScript 5 开始,未定义是只读的)。
【解决方案2】:

它为你的函数创建一个未定义变量的本地副本,它指向实际的未定义,所以如果有人更改了全局未定义的值,它不会影响你的代码。

它的工作原理是,因为您没有在自执行函数中传递第二个参数。所以未定义变量的值实际上是未定义的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 1970-01-01
    • 2017-07-23
    • 2020-11-16
    • 2011-05-07
    • 2011-02-15
    • 1970-01-01
    相关资源
    最近更新 更多