有一个闭包函数的调用问题,普通调用和在闭包函数外面加一层匿名自执行函数,打印出的值不一样
普通匿名函数调用
var bib = function (){
var a = 1;
return function(){
a++;
console.log(a);
}
}
var cc =bib();
var dd = bib();
cc();
cc();
dd();
控制台打印结果:2 3 2
在闭包外层加一个匿名执行函数
var bib = (function (){
var a = 1;
return function(){
a++;
console.log(a);
}
})()
var cc =bib;
var dd = bib;
cc();
cc();
dd();
控制台打印结果:2 3 4
我理解的都是匿名自执行也是闭包,a的值都在调用函数的时候都有单独的作用域,第二种情况打印出的值应该和第一次一样,为何会有偏差呢,求解。。。
匿名自执行只执行了一次,而
bib
执行了两次。造成的区别就是cc === dd
这个表达式放在两段代码里,得到的结果是不一样的。要达到同样的效果,第一段代码应该这样写: