为了账号安全,请及时绑定邮箱和手机立即绑定

一道js的面试题,有点凌乱

一道js的面试题,有点凌乱

小唯快跑啊 2019-03-05 18:08:05
一道js的面试题,有点乱,大神解释下呗~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)); //输出什么????
查看完整描述

3 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

这代码简化之后就是:


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;    //->  自执行匿名函数,这一块就是返回个 1

    }(1, 2)

);

//简化

var test = function (a) { //又是一个自执行匿名函数

    this.a = a;//a 就是1  this === window

    return function (b) {

        return this.a + b; //this === window

    }

}(1);

//再简化

var test = function (b) {

    return 1 + b;

};


console.log(test(4)); //输出 5


查看完整回答
反对 回复 2019-03-13
?
狐的传说

TA贡献1804条经验 获得超3个赞

你可以拆成几部分来看:



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 实际上等同于返回 a,所以又可以精简为:


var test = funcA(1)

test 实际上是接受一个参数,并返回一个匿名函数,而该匿名函数的返回结果为 test的参数与该匿名函数的参数之和。


test(4) = funcA(1)(4) = function(a) {

    this.a = a; // 即 funcA 的参数 4

    return function (b) { // 此处的b即test的参数

        return this.a + b;

    }

}

所以最后的结果为 5


查看完整回答
反对 回复 2019-03-13
?
撒科打诨

TA贡献1934条经验 获得超2个赞

最外层的匿名自执行函数的参数是括号中的返回值。而匿名自执行函数this指向window所以就会有而里面又是个闭包的结构,所以最后会返回的是1+b 而你此时又把4传了进去所以答案会是5


查看完整回答
反对 回复 2019-03-13
  • 3 回答
  • 0 关注
  • 989 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信