前端嘛 Logo
前端嘛

以下代码输出什么?解释原因

const obj = {
  objName: "百度",
  print: () => console.log(this.objName),
};
obj.print();

参考答案

这段代码的执行结果是:

undefined

原因解析

  1. 箭头函数的 this 特性

    • 箭头函数不会创建自己的 this,它的 this 来自 词法作用域,即它定义时所在的上下文。

    • 在这段代码里,print 是用箭头函数定义的,所以它的 this 不是 obj,而是定义它时所在的环境。

  2. 当前环境的 this

    • 这段代码运行在模块或脚本的顶层环境:

      • 在严格模式下,顶层的 thisundefined

      • 在非严格模式下,顶层的 thiswindow(浏览器)或 global(Node.js)。

    • 不论是哪种情况,顶层对象上都没有 objName 属性,因此 this.objNameundefined

  3. 为什么不是 "百度"

    • 如果把 print 定义为普通函数:

      print: function() { console.log(this.objName); }

      那么调用 obj.print() 时,this 会绑定到 obj,输出就是 "百度"

    • 但是箭头函数丢失了这种绑定特性,它固定死了 this,因此取不到 obj 上的 objName