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

js闭包作用域

js闭包作用域

眼眸繁星 2018-10-02 11:07:41
最近在看设计模式中,遇到一个关于闭包的问题,有点想不通啊,求助,代码如下:function foo(){    var a = 10;    function bar(){        a*= 2;        return a;    }    return bar;}var baz = foo();console.log(baz.toString());var blat = foo();console.log(blat.toString());console.log(baz==blat)打印出来的结果:后来,我用单独写了一个函数:function b (){     var tt = 10;        return tt++ } var aa = b; var cc = b; console.log(aa.toString()); console.log(cc.toString()); console.log(aa==cc)打印出来结果:对于第二段的代码,我可以理解,因为函数也是对象,aa和cc都指向同一个引用地址, 但是为啥第一段代码,在闭包中,baz和blat不也是指向同一个引用嘛?为啥不相等?求大神指点
查看完整描述

2 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

第一段代码指向的不是同一个引用,你调用了两次foo,每次调用都会新定义一个bar函数

查看完整回答
反对 回复 2018-10-08
?
噜噜哒

TA贡献1784条经验 获得超7个赞

var baz = foo();

var blat = foo();

内部是return的一个方法,然而,baz = foo();相当于已经运行了一次,

每一次运行都return的是一个新的方法


查看完整回答
反对 回复 2018-10-08
  • 2 回答
  • 0 关注
  • 600 浏览
慕课专栏
更多

添加回答

举报

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