【问题标题】:What is the consequence of this bit of javascript?这段 javascript 的结果是什么?
【发布时间】:2009-06-23 10:20:28
【问题描述】:

我查看了 jQuery UI 代码,发现每个文件都以这样的结构开头:

jQuery.ui || (function($) {

我的问题是:为什么jQuery 之前有一个分号,为什么要进行逻辑或?

【问题讨论】:

标签: javascript jquery jquery-ui


【解决方案1】:

为什么jQuery前面有分号?

分号用于确保安全的文件连接。 (库和库组件经常打包到一个文件中)

为什么要进行逻辑或?

仅当语句左侧的计算结果为假值时,右侧的自调用匿名函数才会运行。因此,如果页面上已经存在 jQuery.ui,则该函数将不会运行。它仅在 jQuery.ui 尚不存在时运行。

【讨论】:

  • 呵呵,“假的”,不错。这是描述评估为假的值的一种很棒的方式,我喜欢它。
  • 不是我的术语...我想我是在 Doug Crockford 的视频中听到的。
【解决方案2】:

我猜; 是为了确保 javascript 打包程序不会弄乱线路,但这是我所拥有的最好的。

逻辑或用于确保jQuery.ui 不会被声明两次。 JavaScript 确实会短路,因此如果左侧的计算结果为 truthey,它不会计算 || 的右侧(感谢 JP!)。 p>

额外的语法解密,传递给匿名函数的 $ 是对 jQuery 的引用。在单击之前,我必须一直向下滚动页面:-)

所以,这是上面一行的分解版本

;              // extra semi colon to ensure correct concatenation and minifying
jQuery.ui      // check if the variable called jQuery.ui is truthey
||             // OR if jQuery.ui isn't defined
(function($) {...})(jQuery); // define and execute an anonymous function
                             // passing in the conflict safe jQuery
                             // as the parameter called $

【讨论】:

    【解决方案3】:

    用英文,那行代码说:要么 jQuery.ui 存在,要么定义这个函数...

    例如如果 jQuery.ui 没有定义,那么会创建函数。

    最初的分号应该没有任何作用 - 它只是分隔代码语句的结尾。

    【讨论】:

      【解决方案4】:

      我认为正在执行逻辑 OR 以允许多次包含(和评估)文件,而不是破坏本身:如果再次加载它,jQuery.ui 将已经定义,它不会这样做任何东西。

      如果有人丢失了脚本标签,该文件可能会被错误地包含多次。

      至于分号,我只能猜测这是一种保障措施,以确保该文件即使包含在另一个文件中也能正常工作,即使最后一条语句没有被分号终止。

      虚假的分号不会造成伤害,缺少的分号可能会造成伤害。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-16
        • 2017-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-19
        • 1970-01-01
        相关资源
        最近更新 更多