无法理解此javascript代码控制流程如何?

时间:2019-12-12 10:49:02

标签: javascript ecmascript-6

这是我无法理解其流程的代码,以及即使在for循环结束后,i的值仍如何保持不变。

RouterModule.forChild(routes),

程序的输出是

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

1 个答案:

答案 0 :(得分:2)

  

这种行为的原因是闭包

     

闭包使您可以从内部访问外部函数的作用域   功能。在JavaScript中,闭包是在每次函数被创建时创建的   在函数创建时创建。 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);