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)

打印出来的结果:

https://img2.mukewang.com/5bbb76f1000192d105940312.jpg

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

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)

打印出来结果:

https://img2.mukewang.com/5bbb771000012fb205920325.jpg

对于第二段的代码,我可以理解,因为函数也是对象,aa和cc都指向同一个引用地址,
但是为啥第一段代码,在闭包中,baz和blat不也是指向同一个引用嘛?为啥不相等?求大神指点


眼眸繁星
浏览 602回答 2
2回答

斯蒂芬大帝

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

噜噜哒

var baz = foo();var blat = foo();内部是return的一个方法,然而,baz = foo();相当于已经运行了一次,每一次运行都return的是一个新的方法
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript