相关疑难解决方法(0)

let vs var:for 循环中的作用域

有人解释一下这个(var 和 let in for 循环之间的行为差​​异)吗?

  1. 经典面试题(结束语):

    let a = [];
    for (var i=0; i<10; i++) {
        a[i] = function() {
          console.log(i,);
        }
    }
    a[0](); // 10
    a[1](); // 10
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如果我们使用让:

    let a = [];
    for (let i=0; i<10; i++) {    // var => let
        a[i] = function() {
        console.log(i);
      }
    }
    
    a[0](); // 1
    a[1](); // 2
    
    Run Code Online (Sandbox Code Playgroud)

是的,我在使用“让”时正常并且符合预期。我想到的第一个想法是 let 不支持关闭。但不,它支持。(随后在 Chrome 上对其进行了测试):

function bb() {
  let b = 1;
  return function() {
    console.log(b);
  }
}
bb()();    // 1, means …
Run Code Online (Sandbox Code Playgroud)

javascript closures for-loop ecmascript-6

3
推荐指数
1
解决办法
971
查看次数

ES6 变量作用域位于循环中,内部有await

我们可能知道,var关键字在全局范围内定义一个变量,或者在整个函数中局部定义一个变量,而不管块作用域如何。因此,下面的代码将记录5具有相同值的时间。

for(var i = 0; i < 5; i++){
  setTimeout(() => console.log(i), 2000);
}
Run Code Online (Sandbox Code Playgroud)

像这样可视化上面的 JS 运行时 在此输入图像描述 正如你所看到的,Callback Queue中的 5 个任务将等待Call stack为空。因此,在同步循环完成后 - 这意味着在我的情况下调用堆栈为空,然后将执行5 个计划任务 -console.log(i)其值i等于。你可以在这里5

我想要的是在之后立即登录i == 2。它按我的预期工作。

for(var i = 0; i < 5; i++){
  setTimeout(() => console.log(i), 2000);
}
Run Code Online (Sandbox Code Playgroud)

但我很好奇它是如何工作的,而我不确定调用堆栈是否为空?当我使用 时await,是否允许异步函数的调用者恢复执行,或者其他什么?

图像流的任何解释/可视化将不胜感激。谢谢。

javascript asynchronous promise ecmascript-6

3
推荐指数
1
解决办法
1318
查看次数

JavaScript:了解 for 循环内的 let 作用域

请考虑下面的片段-

for(let i = 1; i <= 5; i++) {
   setTimeout(function(){
       console.log(i);
   },100);
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,内部的日志setTimeout将包含i每个 for 循环迭代的变量值,即日志如下

1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)

为此,我已经阅读了 Internet 上的解释,例如 -let为每个循环创建一个变量声明,这是块级声明。所以基本上它在{ }.

但我对这个说法有点困惑。如果let为每个循环创建一个变量声明,它不会总是1按照循环初始化语句进行初始化let i=1吗?此外,变量i在循环块外声明、初始化和递增,即for循环语句中的花括号。那么,在每次迭代中,不是i增加和使用相同的变量吗?究竟如何let为每个循环创建一个变量声明并具有前一次迭代的值?

javascript scope for-loop let ecmascript-6

2
推荐指数
2
解决办法
1394
查看次数

为什么JavaScript const适用于in循环

为什么要使用JavaScript const的作品一样letfor in循环?const用于在EC6中声明常量.那么为什么const num价值在每次迭代中得到更新for in

为了让我们

for (let num in nums) {
    console.log(num); // works well, as usual
}
Run Code Online (Sandbox Code Playgroud)

适用于const

for (const num in nums) {
    console.log(num); // why const value getting replaced
}
Run Code Online (Sandbox Code Playgroud)

javascript variables for-in-loop ecmascript-6

1
推荐指数
1
解决办法
123
查看次数

ES6中'let'关键字的范围是什么(请参阅下面的代码片段)

问题标题似乎很简单,但这不是我要问的问题.请尝试以下示例

for(let i=0; i<5; i++){
	//console.log(i);
	let i=5	
	console.log(i);
}
Run Code Online (Sandbox Code Playgroud)

这个例子有效,我的问题是如何在for循环中声明另一个具有相同标识符的变量.

我真的很困惑,发生了什么事?

javascript ecmascript-6

1
推荐指数
1
解决办法
88
查看次数