forEach vs(for、while、if、else..)变量作用域-JavaScript

forEach vs(for、while、if、else..)变量作用域-JavaScript,javascript,Javascript,我不熟悉Java脚本,发现了一种称为“立即函数”的函数类型。我们为什么使用: 定义功能后立即执行任务 创建新的变量范围 for、while、if else语句没有创建新的变量范围,但forEach循环确实创建了一个新范围,这是非常令人困惑的。背后有什么具体原因吗?以下是一些例子:- var foo = 123; if (true) { var foo = 456;// updates the value of global 'foo' } console.log(foo); // 456;

我不熟悉Java脚本,发现了一种称为“立即函数”的函数类型。我们为什么使用:

  • 定义功能后立即执行任务
  • 创建新的变量范围
for、while、if else语句没有创建新的变量范围,但forEach循环确实创建了一个新范围,这是非常令人困惑的。背后有什么具体原因吗?以下是一些例子:-

var foo = 123;
if (true) {
var foo = 456;// updates the value of global 'foo'
}
console.log(foo); // 456;


let  foo2 = 1111111;
var array = new Array(5).fill(5);
array.forEach(function () {
    let foo2 = 222//creates new variable
    // foo2 = 222//updates global variable
});
console.log('test' + foo2);

创建新范围的不是
forEach
,而是
函数
<代码>函数始终创建自己的

读取有关执行上下文、作用域等的更多信息的可能副本:使用
let
也会在
if
块内创建一个新的作用域<代码>让在任何块中定义一个新范围。
const
也是如此<另一方面,code>var作用域受到周围函数子句的限制。@很明显,使用
let
关键字不会创建新的作用域,使用
let
关键字仅意味着创建的变量将仅具有块作用域,而不具有与
var
关键字相同的功能作用域。没有新的作用域,因为
没有更改,它仍然是当前函数作用域的
。@sébastien,感谢您指出。很抱歉,条款操作不当