首页 新闻 搜索 专区 学院

js闭包传参问题

0
悬赏园豆:50 [已关闭问题] 关闭于 2016-06-17 15:51
var func = (function(a){
        this.a = a;
        return function(a){
            a+=this.a;
            return a;
        }
    })(function(a,b){
        return a;
    }(1,2));
    func(4);

程序如上,有两个疑问,一个是()(fucntion(a,b){...}(1,2))最外层闭包传参处内写的格式为什么没有报错,第二个是func(4)传入4时为什么this.a没有被覆盖成4,还是说整个程序我理解错了

natureless的主页 natureless | 初学一级 | 园豆:11
提问于:2016-05-14 16:15
< >
分享
所有回答(2)
0

你貌似理解错了。可以拆分成:

var func = function(a){};

var funcb = function(a,b){};

func(funcb(4));

索引传给a的其实是4.

xingoo | 园豆:711 (小虾三级) | 2016-05-15 13:22

那()(function(a,b){}(1,2))中的(1,2)又如何解释,程序运行结果为5啊,按你的解释结果并不是啊

支持(0) 反对(0) natureless | 园豆:11 (初学一级) | 2016-05-15 14:43

@natureless: 因为相当于传了两次参数啊。

第一次传了1,2,相当于设置a=1;

第二次穿了4,相当于设置a = a+4=5

支持(0) 反对(0) xingoo | 园豆:711 (小虾三级) | 2016-05-15 17:32

@xingoo: 恩,刚才看了看函数式编程,大概知道问题出在哪了,但是还有一点疑问()(function(a,b){}(1,2))中的function(a,b){}(1,2)这部分是作为外层闭包的参数传入的,但他本身写法不就错了么,难道不该是(function(a,b){})(1,2)这个么

支持(0) 反对(0) natureless | 园豆:11 (初学一级) | 2016-05-15 17:36
0

其实核心就是curry化编程,在初始化的时候最外围的参数已经被消化,形成新的函数

natureless | 园豆:11 (初学一级) | 2016-06-17 15:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册