为了账号安全,请及时绑定邮箱和手机立即绑定

请大神帮忙解释下下面这个js代码,为什么count会逐渐增加

请大神帮忙解释下下面这个js代码,为什么count会逐渐增加

慕前端6174657 2017-09-11 07:39:33
const f=(function(){    let count=0;    return function(){         return “i have been called ${++count} times.";}})();f(); // i have been called 1 times.f(); //i have been called 2 times.我的理解每次f()的时候,都会先让count清0啊,哪里理解错了,求指教。
查看完整描述

3 回答

已采纳
?
橋本奈奈未

TA贡献436条经验 获得超108个赞

你先了解立即执行函数和闭包可能比较好理解为什么。
(function(){})()是立即执行的,而return一个函数作为执行后的结果赋值给f。即f等于return的那个函数,你每次调用f其实是执行return的那个函数,函数内有count变量的引用,那么引擎会沿着作用域链查找,所以你每次都会修改count的值。函数里包裹函数就是js里的闭包。可以制造局部作用域,因为js里没有局部作用域(es6之前),所以通常会通过闭包的形式来形成类似局部作用域的效果,外部无法访问里面的变量和函数

查看完整回答
1 反对 回复 2017-09-11
?
cnyballk

TA贡献148条经验 获得超93个赞

//因为f()运行的是这个函数
function(){
         return "i have been called ${++count} times.";
}  
//而不是
function(){
    let count=0;
    return function(){
         return "i have been called ${++count} times.";
}}
查看完整回答
1 反对 回复 2017-09-11
  • 3 回答
  • 0 关注
  • 1658 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信