var a = 100;
var o = {
a: 10,
fn1: function () {
console.log('1---> ' + this.a);
function fn2() {
console.log('2---> ' + this.a);
fn3()
function fn3() {
console.log('3---> ' + this.a);
}
}
fn2()
}
}
o.fn1()
输出结果:
o.fn1(),输出结果是10我是知道的,因为是对象o进行调用的,所以o.fn1的this指向对象o;
但是fn1里面定义的函数的this指向为什么都是指向了全局对象?
在一个函数上下文中,this由调用者提供,由调用函数的方式来决定。
如果调用者函数,被某一个对象所拥有,那么该函数在调用时,内部的this指向该对象。
调用 fn1 的时候,是通过 o.fn1(), 所以在 fn1 中,this指向了 o。
如果函数独立调用,那么该函数内部的this,则指向undefined。
但是在非严格模式中,当this指向undefined时,它会被自动指向全局对象。
fn2 和 fn3 是直接调用的,并且这个是在非严格模式下,所以他们的 this是指向全局的,所以 显示a为100