Skip to content

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

js

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


## 参考答案:

这段代码的执行结果是:

undefined


### 原因解析

1. **箭头函数的 `this` 特性**

   * 箭头函数不会创建自己的 `this`,它的 `this` 来自 **词法作用域**,即它定义时所在的上下文。
   * 在这段代码里,`print` 是用箭头函数定义的,所以它的 `this` 不是 `obj`,而是定义它时所在的环境。

2. **当前环境的 `this`**

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

     * 在严格模式下,顶层的 `this` 是 `undefined`。
     * 在非严格模式下,顶层的 `this` 是 `window`(浏览器)或 `global`(Node.js)。
   * 不论是哪种情况,顶层对象上都没有 `objName` 属性,因此 `this.objName` 是 `undefined`。

3. **为什么不是 "百度"**

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

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

     那么调用 `obj.print()` 时,`this` 会绑定到 `obj`,输出就是 `"百度"`。
   * 但是箭头函数丢失了这种绑定特性,它固定死了 `this`,因此取不到 `obj` 上的 `objName`。


## 题目要点:

* 箭头函数没有自己的 `this`,它继承自定义时的上下文。
* 在对象中定义箭头函数作为方法时,`this` **不会指向该对象**,而是外层作用域。
* 因此这段代码输出 `undefined`,而不是 `"百度"`。