0

今天我遇到了以下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个元素?谢谢!

4

6 回答 6

1

for ( var b = k, d = function (c) {}, a = bp, e = z; 0 < c; ) {

} // for loop closing cause

对于(x=0;;x<somethingx++)

如果您将第一个 for 循环与签名 for 循环映射...

粗体代码是用于在 for 循环中使用的不同变量的声明部分.. .. 可以在此处声明任意数量的变量...

第二个是检查条件...

第三部分是空的

于 2012-10-28T08:14:49.177 回答
1

没有五个部分,只有三个:

  • 第一个包含四个变量声明(、bd)。ae
  • 第二个包含比较 ( 0 < c)。
  • 第三个是空的。

每个部分用分号 ( ;) 分隔,变量声明用逗号分隔,

第一部分允许包含表达式或变量声明列表。有关更多信息,请查看规范MDN JavaScript 文档

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.

于 2012-10-28T08:15:14.620 回答
0

循环中的控制变量也可以是您在示例中的有效表达式。

于 2012-10-28T08:14:01.390 回答
0

您发布的第一个循环与上一个略有不同。第一个声明并分配几个变量(其中一个是函数),然后提供一个条件(0<c),然后每次迭代都不做任何事情。最后一个似乎无效。

第一个问题似乎只是它没有初始化 a c,所以除非 c 是循环范围之外的变量,并且在其主体内以某种方式被更改,否则循环将根本不运行(如果c>=0) 否则它将永远运行(如果c确实小于 0)。

于 2012-10-28T08:15:20.413 回答
0

生病解释,但基本上这不是好的代码。

它的代码不好,因为您需要上网才能弄清楚。

for (var b = k, d = function (c) { // 函数体 }, a = bp, e = z; 0 < 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.结束语句

这都必须用 ; 分隔。

除了这些在 for 循环中都是可选的

for (var init = 0; init < 10; init += 1) {}

如同:

var init = 0;
for (;;) {
 if (!(init < 10)) {
  break;
 }
 init += 10;
}
于 2012-10-28T08:18:46.690 回答
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 < c 时 d 为 0

于 2012-10-28T08:46:43.620 回答