箭头函数this-1

题目

说明运行结果及原因

let Tom = {
  name: "Tom",
  sayHi: function () {
    console.log(`Hi, I am ${this.name}!`);
  },
  showTitle(...titles) {
    this.sayHi();
    console.log(`my title: ${[...titles].join("、")}`);
  },
};

let Jerry = {
  name: "Jerry",
  sayHi: () => console.log(`Hi, I am ${this.name}!`),
};

Tom.showTitle.call(Jerry, "developer", "engineer");

答案

浏览器环境:

Hi, I am !

my title: developer、engineer

node环境(v16.17.1):

TypeError: Cannot read properties of undefined (reading 'name')

sayHi: () => console.log(Hi, I am ${this.name}!)

^

解释:

浏览器环境:Jerry的sayHi函数的作用域的上一层是全局,此时this.name应该是window上的name,但是window上没有声明name属性,所以为空;

Node环境:node环境的全局this是undefined,所以报错

知识点

  • 箭头函数的this指向其声明时作用域的上一层。

  • 函数的call作用

Last updated