今天遇到了以下这样一段代码,看到后一脸懵逼,脑中一片空白,不知如何下手,代码如下:
var test = (function(a){
this.a = a;
return function(b){
return this.a + b;
}
})((function(a,b){
return a;
})(1,2));
console.log(test(4));
一步步剖析,一步步理解:
仔细看的话可以看到有两个自执行函数:(function(a))和(function(a,b)),下面这个自执行函数是
对比这样的函数:
(function(){})();
(function(参数){})(参数实例);
可以看出参数和参数实例是相等的,即参数实例就是该函数的参数;
所以以上代码可以理解为:function(a,b){}这个函数是function(a){}函数中的参数,即参数a = function(a,b){}中的返回值;
根据以上描述,可以得到(function(a,b){return a;})(1,2))函数返回值为a = 1;将a=1传入函数中,得到this.a = 1;
最后function(a){}自执行函数返回个函数给test变量;即test = function(b){return this.a + b};将test(4),将参数4带入函数中,得到1 + 4 = 5;
以上是我自己的理解;如果有其他的理解欢迎共享。