阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      JS for

      功能

      for 语句用于创建一个循环,它包含了三个可选的表达式,三个可选的表达式包围在圆括号中并由分号分隔, 后跟一个在循环中执行的语句(通常是一个块语句)。

      语法

      for ([initialization]; [condition]; [final-expression])
         statement
      

      initialization

      一个表达式 (包含赋值语句) 或者变量声明。典型地被用于初始化一个计数器。该表达式可以使用 var 或 let 关键字声明新的变量,使用 var 声明的变量不是该循环的局部变量,而是与 for 循环处在同样的作用域中。用 let 声明的变量是语句的局部变量。该表达式的结果无意义。

      condition

      一个条件表达式被用于确定每一次循环是否能被执行。如果该表达式的结果为 true, statement 将被执行。 这个表达式是可选的。如果被忽略,那么就被认为永远为真。如果计算结果为假,那么执行流程将被跳到 for 语句结构后面的第一条语句。

      final-expression

      每次循环的最后都要执行的表达式。执行时机是在下一次 condition 的计算之前。通常被用于更新或者递增计数器变量。

      statement

      只要 condition 的结果为 true 就会被执行的语句。 要在循环体内执行多条语句,使用一个块语句({ … })来包含要执行的语句。没有任何语句要执行,使用一个空语句(;)。

      示例

      使用 for

      以下例子声明了变量 i 并被初始赋值为 0,for 语句检查 i 的值是否小于 9,如果小于 9,则执行语句块内的语句,并且最后将 i 的值增加 1。

      for (var i = 0; i < 9; i++) {
         console.log(i);
         // more statements
      }
      

      可选的 for 表达式

      for 语句的所有的表达式都是可选的

      例如,初始化块中的表达式没有被指定:

      var i = 0;
      for (; i < 9; i++) {
          console.log(i);
          // more statements
      }
      

      像初始化块一样,条件块也是可选的。如果省略此表达式,则必须确保在循环体内跳出,以防创建死循环。

      for (var i = 0;; i++) {
         console.log(i);
         if (i > 3) break;
         // more statements
      }
      

      你当然可以忽略所有的表达式。同样的,确保使用了 break 语句来跳出循环并且还要修改(增加)一个变量,使得 break 语句的条件在某个时候是真的。

      var i = 0;
      
      for (;;) {
        if (i > 3) break;
        console.log(i);
        i++;
      }
      

      使用无语句的 for

      以下 for 循环计算 [final-expression] 部分中节点的偏移位置 ,它不需要执行一个 statement 或者一组 block statement ,因此使用了空语句。

      function showOffsetPos(sId) {
      
        var nLeft = 0, nTop = 0;
      
        for (
      
          var oItNode = document.getElementById(sId); /* initialization */
      
            oItNode; /* condition */
      
          nLeft += oItNode.offsetLeft, nTop += oItNode.offsetTop, oItNode = oItNode.offsetParent /* final-expression */
      
        ); /* semicolon */
      
        console.log('Offset position of \'' + sId + '\' element:\n left: ' + nLeft + 'px;\n top: ' + nTop + 'px;');
      
      }
      
      /* Example call: */
      
      showOffsetPos('content');
      
      // Output:
      // "Offset position of "content" element:
      // left: 0px;
      // top: 153px;"
      

      提示:这是 JavaScript 中的少数几种情况,其中分号是强制性的。实际上,没有分号,循环声明之后的行将被视为语句。

      规范

      SpecificationStatusComment
      ECMAScript Latest Draft (ECMA-262)
      for statement
      Draft
      ECMAScript 2015 (6th Edition, ECMA-262)
      for statement
      Standard
      ECMAScript 5.1 (ECMA-262)
      for statement
      Standard
      ECMAScript 3rd Edition (ECMA-262)
      for statement
      Standard
      ECMAScript 1st Edition (ECMA-262)
      for statement
      StandardInitial definition
      目录
      目录