ループ内の変数の再初期化時に注意を使用する


  • 時々、情報を保存する必要がある、インクリメントカウンタ、またはループ内の変数を再設定します.潜在的な問題は、変数が再初期化されなければならないか、そして、その逆であるときです.これは特に、端末の条件に使用される変数を誤ってリセットし、無限ループを引き起こした場合に危険です.
  • 使用してループの各サイクルで変数の値を印刷するconsole.log() 再設定に関連するバギー動作を明らかにするか、変数をリセットすることができません.
  • EX :
    次の関数は、2次元配列を作成することですm 行とn ゼロの列.残念なことに、それは予想される出力を生産していませんrow 変数は外部ループ内で再初期化されていません(空の配列に戻る).コードを修正するので、ゼロの正しい3 x 2配列を返します[[0, 0], [0, 0], [0, 0]] .
  • コード
  • function zeroArray(m, n) {
      // Creates a 2-D array with m rows and n columns of zeroes
      let newArray = [];
      let row = [];
      for (let i = 0; i < m; i++) {
        // Adds the m-th row into newArray
    
        for (let j = 0; j < n; j++) {
          // Pushes n zeroes into the current row to create the columns
          row.push(0);
        }
        // Pushes the current row, which now has n zeroes in it, to the array
        newArray.push(row);
      }
      return newArray;
    }
    
    let matrix = zeroArray(3, 2);
    console.log(matrix); console will display 
    [ [ 0, 0, 0, 0, 0, 0 ],
      [ 0, 0, 0, 0, 0, 0 ],
      [ 0, 0, 0, 0, 0, 0 ] ]
    
  • 固定
  • function zeroArray(m, n) {
      // Creates a 2-D array with m rows and n columns of zeroes
      let newArray = [];
      for (let i = 0; i < m; i++) {
        // Adds the m-th row into newArray
      let row = []; <----------
        for (let j = 0; j < n; j++) {
          // Pushes n zeroes into the current row to create the columns
          row.push(0);
        }
        // Pushes the current row, which now has n zeroes in it, to the array
        newArray.push(row);
      }
      return newArray;
    }
    
    let matrix = zeroArray(3, 2);
    console.log(matrix); will now display 
    [ [ 0, 0 ], [ 0, 0 ], [ 0, 0 ] ]