Skip to content

一、问下列这个表达式的值是多少?

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]))

Released under the MIT License.