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,还是说整个程序我理解错了
你貌似理解错了。可以拆分成:
var func = function(a){};
var funcb = function(a,b){};
func(funcb(4));
索引传给a的其实是4.
那()(function(a,b){}(1,2))中的(1,2)又如何解释,程序运行结果为5啊,按你的解释结果并不是啊
@natureless: 因为相当于传了两次参数啊。
第一次传了1,2,相当于设置a=1;
第二次穿了4,相当于设置a = a+4=5
@xingoo: 恩,刚才看了看函数式编程,大概知道问题出在哪了,但是还有一点疑问()(function(a,b){}(1,2))中的function(a,b){}(1,2)这部分是作为外层闭包的参数传入的,但他本身写法不就错了么,难道不该是(function(a,b){})(1,2)这个么
其实核心就是curry化编程,在初始化的时候最外围的参数已经被消化,形成新的函数