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

一道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)); //输出什么????


小唯快跑啊
浏览 994回答 3
3回答

幕布斯6054654

这代码简化之后就是: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

狐的传说

你可以拆成几部分来看: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

撒科打诨

最外层的匿名自执行函数的参数是括号中的返回值。而匿名自执行函数this指向window所以就会有而里面又是个闭包的结构,所以最后会返回的是1+b 而你此时又把4传了进去所以答案会是5
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript