var x =0;
var foo = {
bar:{
x:2,
bar2:function () {
console.log(this.x);
}
}
}
var a=foo.bar.bar2;
foo.bar.bar2();//2
a();//0
- this永远指向函数运行时所在的对象,而不是函数创建时所在的对象
- 匿名函数和不处于任何对象中的函数,this指向window
- call,apply,with指的this是谁就谁
- 普通函数调用,函数被谁调用,this就指向谁
在上面列子中:
foo.bar.bar2():指向的是foo.bar.x.
a()运行时所在的对象是window,所以指向的是window,最后的值是0