繁体   English   中英

这段 javascript 的结果是什么?

[英]What is the consequence of this bit of javascript?

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

jQuery.ui || (function($) {

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

为什么jQuery前面有一个分号?

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

为什么要进行逻辑或?

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

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

逻辑 or 是为了确保jQuery.ui不会被声明两次。 JavaScript 确实短路,所以它不会评估||的右侧如果左侧的评估结果为(感谢JP !)

额外的语法破译,传递给匿名函数的 $ 是对 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 $

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

例如,如果未定义 jQuery.ui,则将创建该函数。

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

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

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

至于分号,我只能猜测这是一种保护措施,以确保该文件在包含在另一个文件中时也能正常工作,即使那里的最后一条语句没有以分号结尾。

虚假的分号不会造成伤害,丢失的分号可能会造成伤害。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM