87.函数上下文作用域

书诚小驿2025/07/08前端面经算法Javascript

题目描述

let obj = {
  name: "name",
  fn: function () {
    console.log(this.name);
  },
  newFn: () => console.log(this.name),
  sub: {
    name: "sub",
    fn: function () {
      console.log(this.name);
    },
    newFn: () => console.log(this.name),
  },
};

let fn = obj.fn;
let newFn = obj.newFn;
let subFn = obj.sub.fn;
let subNewFn = obj.sub.newFn;

fn();
obj.fn();
newFn();
obj.newFn();
subFn();
obj.sub.fn(); // sub
subNewFn();
obj.sub.newFn();

错误回答

undefined;
name;
undefined;
undefined;
sub;
name;
undefined;
undefined;

参考答案

DETAILS

subFn 是从 obj.sub.fn 赋值过来的。虽然它原本是 obj.sub 对象的方法,但在赋值之后,subFn 成为了一个独立的函数。当调用 subFn() 时,它不再与 obj.sub 对象关联。因此,this 的值取决于调用方式。

这里是通过 obj.sub 对象直接调用 fn 方法。在这种情况下,fn 是作为 obj.sub 对象的方法被调用的。根据 JavaScript 的规则,当通过对象调用方法时,this 指向该对象。因此,this 在这里指向 obj.sub。

undefined;
name;
undefined;
undefined;
undefined;
sub;
undefined;
undefined;
最后更新时间' 2025/7/9 01:40:10