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/