javascript - 关于闭包传参和不传参
巴扎黑
巴扎黑 2017-04-10 17:52:46
[JavaScript讨论组]

请问以下两个为什么不一样?

 var a=1;
    (function(){
        a++;
    })();
    alert(a);//2
 var a=1;
    (function(a){    
        a++;
    })(a);
    alert(a);//1

闭包传参和不传参的区别是什么呢?

巴扎黑
巴扎黑

全部回复(5)
怪我咯
var a=1;//[1]
(function(){
    a++;
})();//[2]
console.log(a);//2

立即执行函数[2]定义的函数为一个闭包函数,在函数体内的变量a指向[1]处声明的变量
所以当立即执行函数[2]执行完毕后,a的值为2

var a=1;//[1]
(function(a){    
    a++;
    console.log(a);//输出2
})(a);//[2]
console.log(a);//1

立即执行函数[2]不形成任何闭包,在函数体内的变量a为函数生成的形参变量,和[1]处声明的变量没有关系,只是名字相同而已~~~

如果修改如下代码,那么输出就为2,有闭包函数形成

var a=1;//[1]
(function(b){    
    a++;
    console.log(a);//输出2
})(a);//[2]
console.log(a);//2
高洛峰

自己体会吧

var a=1;
    (function(){
        a++;
    })();
    alert(a);//2
 var a=1;
    (function(a_in_fun){    
        a_in_fun++;
    })(a);
    alert(a);//1
黄舟

第一个例子立即函数中的a变量是global的a;
第二个例子立即函数中的a屏蔽了全局变量a,是局部变量,对局部变量a的改变不会影响到global的a。

PHP中文网

两点∶一是直接修改数据还是通过函数传参修改数据,二是数值类型是传值并非传参。

怪我咯

我想说,这两个函数,算哪门子的闭包?

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号