看了很多博客对this的指向很迷糊,今天看博客也有些不太理解的地方,希望大家能指点一下。
贴上代码:
var point = {
x : 2,
y : 2,
moveTo : function(x, y) {
var moveX = function(x) {
this.x = x;
};
var moveY = function(y) {
this.y = y;
};
moveX(x);
moveY(y);
}
};
point.moveTo(1, 1);
console.log(point.x); //==>2
console.log(point.y) //==>2
console.log(x); //==>1
console.log(y); //==>1
我的理解是这样的,首先这是一个对象方法调用。当调用moveTo(1,1)的时候this指向point的,但是当执行moveX(x); moveY(y)后。里面的this应该发生了改变了,并没有指向point,所以point.x还是等于2.而且多了两个全局变量x,y。我想问的是,this发生了改变吗?为什么会出现两个全局变量。
没有确定的调用对象的话,默认指向
global
,在浏览器里就是window
,所以此时this.x = x
等效为window.x = x
,等效于创建了全局变量。