一道关于js的this指向的面试题
前前后后学了半个月,今天终于是理解了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