【问题标题】:Not being able to reference a variable from outside the loop无法从循环外部引用变量
【发布时间】:2021-01-18 17:38:49
【问题描述】:

我无法在以下函数中从循环外部引用变量。我想在函数本身中使用值,但范围似乎不允许。

function coinOnTheTable(m, k, board) {
  for (var i = 0; i < board.length; i++) {
    for (var j = 0; j < m; j++) {
      if (board[i][j] === "*") {
        const a = `${i}${j}`;
        return a;
      }
    }
  }
}

工作,同时

function coinOnTheTable(m, k, board) {
  for (var i = 0; i < board.length; i++) {
    for (var j = 0; j < m; j++) {
      if (board[i][j] === "*") {
        const a = `${i}${j}`;
      }
    }
  }
  return a;
}

报错

return a;
     ^
ReferenceError: a is not defined

【问题讨论】:

    标签: javascript loops return


    【解决方案1】:

    这是因为定义为constlet 的变量具有“块作用域”。这意味着它仅在最近的一组花括号内可见。所以:

    function foo() {
       const foo = 'foo-string';
       if(1) {
         const bar = 'bar-string';
         console.log(bar); // This is fine
       }
       console.log(foo); // This is also fine
       console.log(bar); // Error!
    }
    

    要解决您的问题,您需要在嵌套 for 循环定义的块之外定义变量。所以:

    function coinOnTheTable(m, k, board) {
        let a;
        for(var i = 0; i < board.length; i++){
            for(var j = 0; j < m; j++){
                if(board[i][j] === "*"){
                    a = `${i}${j}`;
                }
            }
        }
        return a;
    }
    

    注意,它从const变为let的原因是因为const变量不能被重新赋值,但是由于你想声明它为undefined(在函数的开头,然后赋值一个字符串给它(在循环内),你需要能够重新分配它。

    【讨论】:

      【解决方案2】:

      make a 函数作用域:

      function coinOnTheTable(m, k, board) {
          let a;
          for(var i=0;i<board.length;i++){
              for(var j=0;j<m;j++){
                  if(board[i][j]==="*"){
                      const a=`${i}${j}`;
                  }
              }
          }
           return a;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多