function getCtr(){
  var i = 0;
  return function(){
    console.log(++i);
  }
}
var ctr = getCtr();
ctr();
ctr();

最近五年来我一直在使用Javascript,但是这个问题使我在上一次面试中变得愚蠢。我已尽力尝试了所有方法,但无法解决。

能否请您提供输出结果和原因,以便我能更好地为以后的面试做好准备。

最佳答案

var ctr = getCtr();

这将调用getCtr(),它将i初始化为0,并存储对该函数的引用
function() {
    console.log(++i)
}

在点击率。由于该函数是在getCtr()范围内创建的,因此变量i仍可以在ctr中存储的函数范围内访问。

首次致电
ctr()

执行在i上具有预增console.log(++i),因此将输出1。第二个调用以相同的预增量执行相同的代码,并打印出2

免责声明:不是JavaScript开发人员。如果我犯了错误或使用了一些不受欢迎的措辞,请原谅我。

10-04 19:56