javascript - 无法理解这段 javascript 代码如何控制流程?

标签 javascript ecmascript-6

这是我无法理解其流程的代码,也无法理解即使在 for 循环结束后 i 的值如何仍然存在。

var printNumTwo;

for (let i = 0; i < 5; i++) {
  if (i === 2) {
    console.log("now");
    
    printNumTwo = function() {
      console.log("inside");
      return i;
    };
    
    console.log(i);
  }
  console.log(i);
}

console.log(printNumTwo());

程序的输出是

0
1
now
2
2
3
4
inside
2

最佳答案

reason of this behavior is Closures

A closure gives you access to an outer function’s scope from an inner function. In JavaScript, closures are created every time a function is created, at function creation time. mozilla doc

var printNumTwo;

for (let i = 0; i < 5; i++) {
  if (i === 2) {
    console.log("now");
    
    printNumTwo = function() {
      console.log("inside");
      return i;
    };
    
    console.log(i);
  }
  console.log(i);
}

console.log('now calling printNumTwo()')
let s=printNumTwo();

console.log('now printing return value of printNumTwo()')

console.log('retrun value of PrintNumTwo is:'+s);

关于javascript - 无法理解这段 javascript 代码如何控制流程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59302884/

相关文章:

javascript - JS for item in items -> promise 链得到错误的值

javascript - 过滤对象键不为空的数组

javascript - Angular 和 Spring Rest api 通过 https 进行通信

javascript - 对如何使用 960 网格添加左边距感到困惑

javascript - 如何在 Extjs 中使用网格显示 JSON 数据

javascript - 带有 in 开关的 ES6 block 作用域

javascript - 开 Jest - 测试 mobx store @action TypeError : is not a function

javascript - Bootstrap 图标未显示在 Internet Explorer 中

javascript - 使用字符串键在javascript中创建对象的二维数组

javascript - 从对象获取值并插入数组javascript