请问以下两个为什么不一样?
var a=1;
(function(){
a++;
})();
alert(a);//2
var a=1;
(function(a){
a++;
})(a);
alert(a);//1
闭包传参和不传参的区别是什么呢?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
立即执行函数[2]定义的函数为一个闭包函数,在函数体内的变量a指向[1]处声明的变量
所以当立即执行函数[2]执行完毕后,a的值为2
立即执行函数[2]不形成任何闭包,在函数体内的变量a为函数生成的形参变量,和[1]处声明的变量没有关系,只是名字相同而已~~~
如果修改如下代码,那么输出就为2,有闭包函数形成
自己体会吧
第一个例子立即函数中的a变量是global的a;
第二个例子立即函数中的a屏蔽了全局变量a,是局部变量,对局部变量a的改变不会影响到global的a。
两点∶一是直接修改数据还是通过函数传参修改数据,二是数值类型是传值并非传参。
我想说,这两个函数,算哪门子的闭包?