匿名函数自执行问题

今天遇到了以下这样一段代码,看到后一脸懵逼,脑中一片空白,不知如何下手,代码如下:

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;

以上是我自己的理解;如果有其他的理解欢迎共享。