这个javascript的结果是什么?

jrh*_*ath 10 javascript jquery jquery-ui

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

;jQuery.ui || (function($) {
Run Code Online (Sandbox Code Playgroud)

我的问题是:为什么之前有分号jQuery,为什么逻辑OR正在完成?

JRH

Jam*_*mes 21

为什么jQuery之前有分号?

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

为什么逻辑OR正在完成?

只有当语句的左侧评估为falsey值时,右侧的自调用匿名函数才会运行.因此,如果jQuery.ui页面上已存在,则该函数将不会运行.它只在jQuery.ui尚不存在时运行.

  • 呵呵,"假",很好.这是一种很棒的方式来描述一个评估为false的值,我喜欢它. (2认同)

Dan*_*n F 6

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

逻辑或是确保jQuery.ui不会被声明两次.JavaScript确实会短路,因此||如果左侧评估为truthey ,它将不会评估右侧(感谢JP!).

Bonus语法解密,传递给匿名函数的$是对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 $
Run Code Online (Sandbox Code Playgroud)