CodeWalk

以下代码的输出结果是什么(this 综合题)?

作者:苦行僧 · 2026-05-30 12:55

const obj = {
  name: 'obj',
  fn: function() {
    console.log(this.name);
  }
};
const fn = obj.fn;
fn();
obj.fn();
(obj.fn)();
(fn, obj.fn)();

请问输出结果是什么?

回答

苦行僧

输出undefined(或报错)、'obj''obj'undefined(或报错)

逐行分析

  1. fn():隐式丢失。obj.fn 提取后再调用,this 退化为默认绑定。非严格模式指向 windowwindow.name 通常为空),严格模式为 undefined 导致 TypeError

  2. obj.fn():隐式绑定,this 指向 obj,输出 'obj'

  3. (obj.fn)():分组运算符不改变引用类型,仍然是属性访问表达式,等同于 obj.fn(),输出 'obj'

  4. (fn, obj.fn)():逗号运算符返回最后一个表达式的值,即 obj.fn 的函数本身。此时已脱离对象,退化为独立函数调用,this 为默认绑定。