今天我遇到了以下JS:
for (var b = k, d = function (c) {
// function body
}, a = b.p, e = z; 0 < c;) {
} // for loop closing cause
有人可以解释一下这里发生了什么吗?我对这个函数感到困惑,正常的“for”循环会这样做:
for(x=0; x<something; x++){
}
此循环似乎遵循不同的结构:
for(x=0; d = function(c), a = somevar, e = somevar, 0 < c)
为什么for循环中有5个元素?谢谢!
答案 0 :(得分:1)
for( var b = k,d = function(c){},a = b.p,e = z; 0 < c;
){
} // for loop closing cause
for( x = 0 ; x<something
; x ++)
如果您将第一个for循环映射为循环签名...
粗体的代码是将在for循环中使用的不同变量的声明部分.. ..可以在这里声明任意数量的变量......
第二个是检查条件......
第三部分是空的
答案 1 :(得分:1)
没有五个部分,只有三个部分:
b
,d
,a
和e
)。0 < c
)。每个部分用分号(;
)分隔,变量声明用逗号,
分隔。
允许第一部分包含表达式或变量声明列表。有关详情,请查看specification或MDN JavaScript documentation:
<强>
initialization
强>
表达式(包括赋值表达式)或变量声明。通常用于初始化计数器变量。此表达式可以选择使用var
关键字声明新变量。这些变量不是循环的局部变量,即它们与for循环所在的范围相同。此表达式的结果将被丢弃。
仅因为for(x=0; x<something; x++)
是最典型的形式,并不意味着其他形式不存在。每个部分都可以包含任意表达式。例如,迭代DOM元素的所有子元素的有用方法如下:
for(var node = element.firstChild; node; node = node.nextSibling) {
}
首先,使用元素的第一个子元素初始化node
。第二部分仅测试node
是否null
(您还可以明确地编写node !== null
)和第三部分(在迭代后执行)将下一个子项分配给node
答案 2 :(得分:0)
循环中的控制变量也可以是您的示例中的有效表达式。
答案 3 :(得分:0)
您发布的第一个循环与上一个略有不同。第一个声明并分配几个变量(其中一个是函数),然后提供条件(0<c)
,然后每次迭代都不执行任何操作。最后似乎无效。
第一个问题似乎只是它没有初始化c
,所以除非c是一个来自循环范围之外的变量,它在某种程度上被改变了它的体内,循环将完全不运行(如果c>=0
)或它将永远运行(如果c
确实小于0)。
答案 4 :(得分:0)
我会解释,但基本上这不是好的代码。
它不是很好的代码,因为你需要上网才能搞清楚。
for(var b = k,d = function(c){ //函数体 },a = b.p,e = z; 0&lt; c;){
} // for loop closing cause
相当于
var b = k,
d = function (c) {
// function body
},
a = b.p,
e = z;
for (; 0 < c; ){
}
for循环父母有三个部分 1.初始化 2.条件 3.结束陈述
必须用a;
分隔除了这些在for循环中都是可选的
for (var init = 0; init < 10; init += 1) {}
同样如下:
var init = 0;
for (;;) {
if (!(init < 10)) {
break;
}
init += 10;
}
答案 5 :(得分:0)
for (var b = k, d = function (c) {
// function body
}, a = b.p, e = z; 0 < c;) {
} // for loop closing cause
只要d不为0,for循环就会运行。当0 <0时,d为0。 ç