【问题标题】:JavaScript - Solution of an exercise does not work when using let instead of varJavaScript - 当使用 let 而不是 var 时,练习的解决方案不起作用
【发布时间】:2018-12-19 19:51:29
【问题描述】:

将 var 替换为 let 时收到错误消息。我想这与它们的不同范围有关,但不知道如何修改代码以便它也可以与 let 一起使用。

var array = [242, 682, 933];

for (var i = 0, sum = 0; i < array.length; sum += array[i++]){
  var b = array[i];
  var x = Math.floor(b/100) % 10;
  var y = Math.floor(b/10) % 10;
  var z = b%10;

  if (x+z!==y) {
    break;
  }
}

console.log (sum);

【问题讨论】:

  • 924 预期结果?
  • @HongyuWang 为什么?
  • 声明 var sum 并在 for 循环内使用 let
  • @HongyuWang - 这不是真的。您绝对可以在全局范围内使用let。小心 b/c 它在其他任何地方都有块范围。
  • @Maxim 是的,结果是 924

标签: javascript scope var let


【解决方案1】:

我看到的唯一问题是,当您在 for 循环条件中替换 var 时,您的变量 sum 将无法从 for 循环外部访问,因此 console.log (sum); 会给您一个错误。

【讨论】:

    【解决方案2】:

    因为let 关键字比var 更能限制变量范围。

    检查这个:let on MDN

    如果你想在循环块之外访问sum,你还必须在外面声明它:

    var array = [242, 682, 933];
    let sum = 0; // <-- declaration in the highest scope
    
    for (let i = 0; i < array.length; ++i){
      let b = array[i];
      let x = Math.floor(b/100) % 10;
      let y = Math.floor(b/10) % 10;
      let z = b%10;
    
      if (x + z !== y) {
        break;
      }
    
    
      sum += array[i];
    }
    
    console.log (sum); // now you can access it here
    

    【讨论】:

      猜你喜欢
      • 2013-01-24
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-19
      • 2013-11-12
      相关资源
      最近更新 更多