您的位置:首页 > 其它

一个简单的例子,看明白this

2017-11-01 13:08 197 查看
这里有一段简单的代码,

function obj(){
console.log(this.a);
}
var fn= {a:123,obj:obj};
var a= 321;
var fn1= fn.obj;
fn.obj();
fn1();


大意的人一定会脱口而出这两个函数的执行结果是一样的,

其实这两个函数执行的结果是不一样的,虽然他们调用的是同一个方法,但是在这里this的指向已经发生了变化

fn.obj()返回的是123,fn1()返回的是321;

我们都知道this的指向是在调用到它的时候才会知道指向哪里,并不是在词法阶段就明确了的;

fn.obj()调用的时候,this的上下文绑定的还只是fn这个对象,属于直接调用;

当把fn.obj赋值给变量fn1后,调用fn1()虽然执行的函数是同一个,但是这时的this上下文就变成了变量fn1,这个全局变量

这时的this.a指向的也是全局变量a,因此会返回321
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: