关于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
上一篇:
Java基础知识总结(2021版)
下一篇:
弹性盒子垂直水平居中的9种方法