请教大神,为什么x.x等于undefined y.x等于6

function a(xx){

this.x = xx

return this
    
}

var x = a(5)  

var y = a(6)

console.log(x.x)  // undefined

console.log(y.x)  // 6

实例化对象时要用new调用构造函数。
var x = new a(5)
var y = new a(6)
 

你确定一个是undefined,一个是6?我在自己电脑上跑了,非严格模式下两个都是6。严格模式下会报错。你这种调用方式,在非严格模式下,a函数里面的this其实是全局对象window,相当于window.x=xx,return window。这样一来,x和y其实都是window。在严格模式下this是undefined,undefined.xx会报错。

 

都是6吧

和js 预编译有关,x,y先变量提升,然后执行两个方法之后,this.x = xx这个使得x=6,所以最后x=6,y是window对象,所以window.x=6。关键点事var x与 你赋值的this.x=xx属性名重复了