js闭包作用域

最近在看设计模式中,遇到一个关于闭包的问题,有点想不通啊,求助,代码如下:

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)

打印出来的结果:

clipboard.png

后来,我用单独写了一个函数:

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)

打印出来结果:

clipboard.png

对于第二段的代码,我可以理解,因为函数也是对象,aa和cc都指向同一个引用地址,但是为啥第一段代码,在闭包中,baz和blat不也是指向同一个引用嘛?为啥不相等?求大神指点
阅读 2.7k
5 个回答
var baz = foo();
var blat = foo();
内部是return的一个方法,然而,baz = foo();相当于已经运行了一次,
每一次运行都return的是一个新的方法

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

baz和blat不是指向同一个引用吧

注意执行赋值的区别,虽然我也不能很好的阐述,如果有谁说通了你,记得和我说说

兄弟你一开始写的那个闭包返回的是函数体,你自己写的并不是一个函数体,这两者压根就没有可比性

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题