我一直在研究jQuery源代码,当检查jQuery.fn.extend
函数时,我注意到以下内容:
for ( ; i < length; i++ ){
code
}
为什么在开头会有一个分号
;
?同样,我注意到一些JavaScript库也是这样开头的:; (function (){ ...
没有任何先前的代码。
为什么?这在语法上是如何正确的?
谢谢。
我一直在研究jQuery源代码,当检查jQuery.fn.extend
函数时,我注意到以下内容:
for ( ; i < length; i++ ){
code
}
;
?同样,我注意到一些JavaScript库也是这样开头的:; (function (){ ...
没有任何先前的代码。
为什么?这在语法上是如何正确的?
谢谢。
for( ; i < length; i++)
第一个参数被省略了。分号;
没有作为参数传递。分号;
只是一个分隔符。 for
循环的语法如下:
for( [optional parameter 1] ; [optional parameter 2] ; [optional parameter 3] )
OR
for ([initialization] ; [condition] ; [final-expression])
for( ; i < length; i ++ ) // first parameter is omitted
for( ; i < length; ) // first and third parameters are omitted
for( ; ; ) // all parameters are omitted
这两个代码片段是无关的。
第一个是一个空语句。一个 for
循环需要3个语句;如果你在循环之前初始化变量,则不需要在内部进行初始化,但语句必须存在,因此出现了空语句:
var i=0;
for (; i<10; i++) {}
一个典型的例子是for(;;)
,与while(true)
相同但更短。
第二段代码是IIFE(立即调用函数表达式)的开头。开头的分号是为了避免其他JavaScript文件缺少分号而导致的连接错误,否则IIFE可能会被解释为函数调用,例如:
// file1.js
var f = function(){} // oops
// file2.js
(function(){})();
.js
文件(以及<script>
块)不是分别解析的吗? - JLRishefor (var i = 0; i < length; i++) {
。
var i = 0;
for (; i < length; i++) {
; (function(){ ...
,前面的;
只是一个空语句。在JavaScript中,分号仅用于表示语句的结尾,本身是有效的。