javascript - 这个javascript的输出和原因

标签 javascript

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

过去五年我一直在使用 Javascript,但在上次面试中这个问题让我哑口无言。据我所知,我尝试了一切,但无法弄清楚。

能否请您帮助我了解输出结果及其原因,以便我可以更好地准备 future 的采访。

最佳答案

var ctr = getCtr();

这会调用 getCtr(),它将 i 初始化为 0,并存储对该函数的引用

function() {
    console.log(++i)
}

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

第一次调用

ctr()

执行 console.log(++i),它在 i 上有一个preincrement,所以它打印出 1。第二次调用执行相同的代码,具有相同的预增量,并打印出 2

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

关于javascript - 这个javascript的输出和原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7108182/

相关文章:

javascript - 制作二维码全 Angular

javascript - 调整大小时,响应式轮播 slider 控制触发/触发多次

javascript - 如何配置 ExpressJS 渲染布局的路径

javascript - ReactJS + Material-UI : How to alternate colors between Material-UI <Table/>'s <TableRow/>?

javascript - switch case 语句中的分号

javascript - 带有 Phonegap 的 TabBar 不适用于每个页面

javascript - 使用 location.href 来处理缓慢的请求

javascript - 如何使用 lodash 将对象转换为数组

javascript - 脚本 1002 : Syntax error in IE11 with React + Babel + Webpack

javascript - C --> JS 寻找等价物