以下代码输出什么?解释原因
const obj = {
objName: "百度",
print: () => console.log(this.objName),
};
obj.print();参考答案
这段代码的执行结果是:
undefined原因解析
箭头函数的
this特性箭头函数不会创建自己的
this,它的this来自 词法作用域,即它定义时所在的上下文。在这段代码里,
print是用箭头函数定义的,所以它的this不是obj,而是定义它时所在的环境。
当前环境的
this这段代码运行在模块或脚本的顶层环境:
在严格模式下,顶层的
this是undefined。在非严格模式下,顶层的
this是window(浏览器)或global(Node.js)。
不论是哪种情况,顶层对象上都没有
objName属性,因此this.objName是undefined。
为什么不是 "百度"
如果把
print定义为普通函数:print: function() { console.log(this.objName); }那么调用
obj.print()时,this会绑定到obj,输出就是"百度"。但是箭头函数丢失了这种绑定特性,它固定死了
this,因此取不到obj上的objName。
