鍍金池/ 問(wèn)答/HTML/ 一道js的面試題,有點(diǎn)凌亂

一道js的面試題,有點(diǎn)凌亂

一道js的面試題,有點(diǎn)亂,大神解釋下唄~

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)); //輸出什么????
回答
編輯回答
逗婦惱

你可以拆成幾部分來(lái)看:


var funcA = function(a) {
    this.a = a;
    return function (b) {
        return this.a + b;
    }
}

var funcAB = function (a, b) {
    return a;
}

var test = funcA(funcAB(1, 2))

console.log(test(4));

這里面, funcAB 實(shí)際上等同于返回 a,所以又可以精簡(jiǎn)為:

var test = funcA(1)

test 實(shí)際上是接受一個(gè)參數(shù),并返回一個(gè)匿名函數(shù),而該匿名函數(shù)的返回結(jié)果為 test的參數(shù)與該匿名函數(shù)的參數(shù)之和。

test(4) = funcA(1)(4) = function(a) {
    this.a = a; // 即 funcA 的參數(shù) 4
    return function (b) { // 此處的b即test的參數(shù)
        return this.a + b;
    }
}

所以最后的結(jié)果為 5

2017年1月30日 06:27
編輯回答
心癌

這代碼簡(jiǎn)化之后就是:

var test = function (b) {
    return 1 + b;
};
var test = function (a) {
    this.a = a;
    return function (b) {
        return this.a + b;
    }
}(
    function (a, b) {
        return a;    //->  自執(zhí)行匿名函數(shù),這一塊就是返回個(gè) 1
    }(1, 2)
);
//簡(jiǎn)化
var test = function (a) { //又是一個(gè)自執(zhí)行匿名函數(shù)
    this.a = a;//a 就是1  this === window
    return function (b) {
        return this.a + b; //this === window
    }
}(1);
//再簡(jiǎn)化
var test = function (b) {
    return 1 + b;
};

console.log(test(4)); //輸出 5
2018年2月25日 12:05