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
请问为什么会出现这种结果呢
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
请问为什么会出现这种结果呢
因为你调用函数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
13 回答12.8k 阅读
7 回答1.9k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
6 回答873 阅读✓ 已解决
6 回答1k 阅读
2 回答1.3k 阅读✓ 已解决
首先在浏览器中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