深圳市伙伴行网络科技有限公司(单题)
题型 | 难易度 | 出现频率 | 浏览 | 评论 |
---|---|---|---|---|
问答题 | 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是指向全局的,所以会打印HB2.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