深圳市伙伴行网络科技有限公司(单题)

题型 难易度 出现频率 浏览 评论
问答题 11 0
试题信息收集不易,转发请带上出处,不甚感谢!如果您对任何编程问题还有疑问,欢迎点击下方按钮向老师提问!
问答题
  • 下面代码打印结果分别是什么? function a(){ this.name='HB'; console.log(this.name) } b={ name:'HB', fn:() => { console.log(this.name, this) } } a(); b.fn(); console.log(a.name); console.log(this.name)

本题主要考察的事this在JavaScript中的用法,涉及到原型和箭头函数

打印顺序依次为

HB

HB ,Window

a

HB

解析:1.首先大家要明白在全局作用域中,当代码在浏览器中执行的时候,所有的全局变量和函数都被定义在 window 对象上。因此,当我们在全局函数中使用 this 的时候,它会指向全局 window 对象并且拥有它的值(除非在严格模式下),此时的 this 就成了整个 JavaScript 应用程序或者说整个网页的主容器。所以,在a()里面的this是指向全局的,所以会打印HB

2.b.fn() 本来按照我们的理解,这里面的this指向的是b这个对象,不过由于出现了箭头函数,那么我们需要记住一个结论,箭头函数中的this指向的是定义时的this,而不是执行时的this,所以定义是的this,指向的事Window,所以会打印HB ,Window

3.a.name为什么会打印出a呢,我想大家可能对这个有点疑问,那么接下就由我来解释一下,在a函数里面是没有name这个属性的, 但是如果你打印一下a.prototype这个属性,你就会发现在a的原型里面有name这个属性,我们都知道,打印一个对象的时候先从本身找有没有这个属性,如果没有会根据原型链来寻找,一直到null为止

4.this.name这个就没什么争议了,全局的变量name,HB


还能输入{{limitInput-commentDet.length}}个字符