ES6:'strict mode' for 循环内的多重让分配



我正在尝试'严格模式',并使用关键字让像这样的前面的内部:

  (function() {
    "use strict";
    var numbers = [1,2,3,4,5];
    var value;

    for (let i = j = 0; i < numbers.length; i++) {
      j += numbers[i];
      value = j;
    }
      console.log ("tThe reduced value is: ", value);    
  })();    

这会产生一个未定义的参考文献:J不是定义的,而是通过删除"严格"代码运行良好。

我的jsfiddle

减少了代码的子集

问题是您所期望的,for for for循环中的初始评估语句:

let i = j = 0;

此语句与:

相同
let i = (j=0);

与:

相同
j = 0; // would throw : Uncaught ReferenceError: j is not defined
let i = j;

如果要修复严格模式错误,则需要明确将J声明为变量,让J = 0;

它由于提升而在草率模式下起作用,这将在全局范围中创建变量J。(https://www.w3schools.com/js/js_hoisting.asp(

编辑:Bergi是对的,我混合了这些概念,由于范围链而不是吊装,它在全球范围内可用。如果变量在本地范围内未申请,则它查看该变量的外词法范围。如果在那里仍未定义,它将不断上升范围链,直到达到全球范围为止。如果仍未在此处定义,则它会自动在全局范围中定义,这是您每次使用j。

时引用的变量

构造

let i = j = 0

实际上与关键字let无关。

让我们看看它在引擎盖下的作用:

let i // declares i
j = 0 // assigns a variable j to 0 that is not declared
      // If it does not exist it creates the variable on the `window` object.
i = j // in fact i = window.j

正确使用

let i = 0, j = 0

相关内容

  • 没有找到相关文章

最新更新