一个有意思的let面试题

今天看到一个面试题:

 let des = "我在外边"
 let obj = {
      des: "我在里面",
      foo: function() {
          console.log(this.des)
      }
  }

  let bar = obj.foo;
  bar();

这个bar()调用后会打印出什么?

本以为是考 this,前两天刚好总结过this,自以为这方便还阔以。大眼一看这肯定打印 我在外边,还想骗我写我在里面。作为一个谨慎的程序员,我就写了一个demo,尼玛,居然是undefined,此时第一反应是不是浏览器问题,又换了一个浏览器,发现还是 undefined

首先在foo函数中添加console.log(this),发现打印window对象。查找windw对象,发现里面并没有des属性。紧接着 在声明des对象改成使用 var 来声明var des = "我在外边",发现打印的是我在外边,并且window对象中拥有des属性。因此猜想let定义全局属性时,不会作为window对象的属性。

查找let 文档发现,在程序和方法的最顶端,let不像 var 一样,let不会在全局对象里新建一个属性:

var x = 'global';
let y = 'global';
console.log(this.x); // "global"
console.log(this.y); // undefined
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值