一道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)); //输出什么????
一道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)); //输出什么????
你可以拆成几部分来看:
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
8 回答4.8k 阅读✓ 已解决
6 回答3.5k 阅读✓ 已解决
5 回答2.9k 阅读✓ 已解决
5 回答6.4k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
这代码简化之后就是: