关于this指向的面试题,

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

结合复习的作用域知识,重新梳理流程:

var x
var y
function a(xx){
          
   
  this.x = xx;
  return this
};

x = a(5);
//首先执行右边的部分,由于是函数独立调用,因此返回的是window,a(5)=window,此时window中有一个x属性,值为5,即window.x = 5;
//接着完成赋值部分x = window,
//神奇的事情出现惹!此时x=window,那么我们之前的window.x = 5,自然也就变成了window.x = window,
//如果这个时候不执行下面的var y = a(6),直接console.log(x,x),是可以输出window的


y = a(6);
//那这一块其实就很好理解啦
// 先执行右边的部分,返回的是window,此时的window.x变成了6
// y = window
//总结一下,我们的window.x 经历了三个变化 5 - window - 6

console.log(x.x)  // undefined
//所以这个时候,俺们的x,也就是window.x,实际上是6,6肯定是没有x这个属性的,因此输出undefined
console.log(y.x)  // 6
//这个时候y指向window,全局x为6,因此输出6
经验分享 程序员 微信小程序 职场和发展