一、问下列这个表达式的值是多少?
js
console.log.call.call.call.call.call.apply((a) => a, [1, 2])
题解:
- 首先再讲这题之前先搞清楚一个概念,像这种表达式
a.b.c.d.e.f
最终返回的是什么,是前面的a
还是后面的e
,那答案肯定是后面的e
- 那再看题目
console.log.call.call.call.call.call.apply((a) => a, [1, 2])
相当于a.b.c.d.e.f()
的一个函数调用。那最终返回的是什么呢? 返回的是最后一个函数e()
的调用结果 - 同理
console.log.call.call.call.call.call.apply((a) => a, [1, 2])
返回的是apply
的执行结果 - 那么这个
apply
是怎么执行的呢? 比如函数.apply(参数1, [1, 2])
,相当于参数 1.函数(1, 2)
,函数的this
正好指向参数1
- 所以
console.log.call.call.call.call.call.apply((a) => a, [1, 2])
就相当于((a) => a).call(1, 2)
((a) => a).call(1, 2)
就相当于((a)=>a)(2)
所以整个表达式返回的就是2
- 测试:
console.log( console.log.call.call.call.call.call.apply((a) => a, [1, 2]))