我一直在研究 jQuery 源代码,在检查jQuery.fn.extend函数时我注意到了这一点:
for ( ; i < length; i++ ){
code
}
Run Code Online (Sandbox Code Playgroud)
为什么;开头有?同样,我注意到一些 javascript 库是这样开头的:
; (function (){ ...
Run Code Online (Sandbox Code Playgroud)
无需任何预先代码。
为什么是这样?这在语法上如何正确?
谢谢你。
这两个片段是不相关的。
第一个是空语句。一个for循环需要 3 个语句;如果在循环之前初始化变量,则不需要在内部初始化它,但语句必须在那里,因此是空语句:
var i=0;
for (; i<10; i++) {}
Run Code Online (Sandbox Code Playgroud)
一个典型的例子是for(;;),相同while(true)但更短。
第二段代码是 IIFE(立即调用函数表达式)的开始。开头的分号是为了避免可能缺少分号的其他 JavaScript 文件的连接错误,否则 IIFE 可能会被解释为函数调用,例如:
// file1.js
var f = function(){} // oops
// file2.js
(function(){})();
Run Code Online (Sandbox Code Playgroud)
如果文件确实包含最后一个分号,那么您最终会得到一个空语句,这是可以的。
JavaScriptfor循环有三个可选参数。因此,您可以省略其所有三个参数。
在您的代码中,
for( ; i < length; i++)
Run Code Online (Sandbox Code Playgroud)
省略第一个参数。;不作为参数传递。;只是一个分隔符。for循环的语法是
for( [optional parameter 1] ; [optional parameter 2] ; [optional parameter 3] )
Run Code Online (Sandbox Code Playgroud)
或者
for ([initialization] ; [condition] ; [final-expression])
Run Code Online (Sandbox Code Playgroud)
所以以下语句在语法上是正确的
for( ; i < length; i ++ ) // first parameter is omitted
for( ; i < length; ) // first and third parameters are omitted
for( ; ; ) // all parameters are omitted
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
757 次 |
| 最近记录: |