level 2
这题目属实恶心...
method为对象obj的一个属性, 他的属性值是一个函数
这个函数显示声明接受 一个 参数
函数第一行的意思是, 把这个参数当做函数来执行.
第二句的意思是, 把arguments里索引为0的参数当做函数来执行.
arguments是对当前函数参数序列的引用, 但他只是个Array like, 不过刚好有一个叫length的属性.
虽然method只声明了一个参数, 但最终调用的时候却传递了3个参数
所以这时候arguments的length是3
而第一句的fn()原地执行时候是没有上下文的, 所以第一句的fn执行时, this指向global, global里已经定义了var length = 20, 所以先打印 20
第二句里此时arguments里第0个参数指向的也是fn,但却是由arguments来调用, 所以这时fn的this指向了arguments, 所以打印3
这种题是真的垃圾, 净整些没用的玩意, 正经人谁写这种代码, 全是些js的上古遗毒.
es的版本演进都在努力避免这些坑, 但这些题目还在沉浸在远古版本写些垃圾代码来考验别人. 劝你直接从es6开始, 让这些nt自己玩自己的
2020年11月27日 12点11分
