首页 > 解决方案 > 无法理解这段 javascript 代码如何控制流程?

问题描述

这是我无法理解其流程的代码,以及即使在 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

标签: javascriptecmascript-6

解决方案


这种行为的原因是闭包

闭包使您可以从内部函数访问外部函数的范围。在 JavaScript 中,每次创建函数时都会在函数创建时创建闭包。Mozilla 文档

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);


推荐阅读