[英]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.