我看着jQuery UI的代码,我发现每一个文件,这样的结构开始:这位javascript的结果是什么?
;jQuery.ui || (function($) {
我的问题是:为什么会出现jQuery
之前一个分号,为什么是逻辑或正在做?
JRH
我看着jQuery UI的代码,我发现每一个文件,这样的结构开始:这位javascript的结果是什么?
;jQuery.ui || (function($) {
我的问题是:为什么会出现jQuery
之前一个分号,为什么是逻辑或正在做?
JRH
为什么有jQuery的前一个分号?
分号用于确保安全文件连接。 (库和库组件经常被打包成单个文件)
为什么逻辑OR正在完成?
右侧的自助匿名函数只有在语句的左侧计算为falsey值时才会运行。因此,如果页面上已存在jQuery.ui
,则该函数将不会运行。它只在jQuery.ui
尚不存在时运行。
在英语中,该行代码说:要么jQuery.ui存在,或定义此功能...
例如如果没有定义jQuery.ui,那么该函数将被创建。
最初的分号应该没有作用 - 它只是分隔代码语句的结尾。
我认为正在完成逻辑OR以允许多次包含(和评估)文件,而不是clobber本身:如果再次加载它,jQuery.ui将会被定义,并且它不会做任何事情。
如果有人丢失了脚本标记,该文件可能会被错误地包含多次。
至于分号,我只能猜测这是一个安全措施,以确保文件如果包含在另一个文件中也可以工作,即使最后一个语句没有以分号结尾。
伪造的分号不会造成伤害,可能会丢失分号。
我猜;
是为了确保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 $
您的第一个问题是[JavaScript库中的前导分号做什么?](http://stackoverflow.com/q/1873983/1048572) – Bergi 2016-06-10 21:44:04
或其他方式的副本?你链接的问题比这个新的几个月更新.. – jrharshath 2016-06-13 17:07:10