请教一下大家,下面的代码里x.x为什么是undefined,谢谢大家。

新手上路,请多包涵

function a(parm) {

this.x = parm;
return this; 

}
var x = a(5);
var y = a(6);
console.log(x.x);//输出结果是undefined
console.log(y.x);//输出结果是6

请问为什么会出现这种结果呢

阅读 3k
4 个回答

首先在浏览器中function a()里面的this是等于window的。
当执行 var x = a(5);的时候。 window.x=5; window.x = window;
当执行 var y = a(6);的时候。 window.x=6; window.y = y;

此时 x.x 等于 (6).x; //undefined
此时 y.x 等于 window.x; //6

因为你调用函数a之后,你在函数内部定义的this.x就升级了,x变成了全局变量,而你输出x的时候它首先会去找全局变量,所以~~~你换成输出x就会发现——console.log(x) //6,全局变量x自然是没有x属性的啦

var x = a(5);  ===> x == window; window.x == window;
var y = a(6);  ===> x == 6;y == window;window.x = 6;
var x = a(5);
var y = a(6);

运行上面的代码和下面的代码等价:

var x = window.a(5);
var y = window.a(6);

运行结束后:

x = 6
y = window

后期再执行:

console.log(x.x);
console.log(y.x);

相当于执行了:

console.log((6).x);    // undefined
console.log(window.x); // 6
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题