前端面试题--技术无忧(tech51.cn)
function foo() {
  console.log(this.a)
}
function doFoo(fn) {
  console.log(this)
  fn()
}
var obj = { a: 1, foo }
var a = 2
doFoo(obj.foo)

解析: 用函数预编译的知识来解答这个问题:函数预编译四部曲前两步分别是:
找形参和变量声明,值赋予undefined.
将形参与实参相统一,也就是将实参的值赋予形参。
obj.foo作为实参,在预编译时将其值赋值给形参fn,是将obj.foo指向的地址赋给了fn,此后fn执行不会与obj产生任何关系。fn为默认绑定。

答案: Window {…}, 2

编号: 99