关于this指向的面试题,

一道关于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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值