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