MST

星途 面试题库

面试题:JavaScript 函数定义与调用方式之高级题

假设有一个函数 `functionA`,定义如下:`function functionA() { console.log(this); }`。请分别在全局作用域、对象方法调用、使用 `call`、`apply`、`bind` 改变 `this` 指向这几种情况下调用 `functionA`,并解释每种情况下 `this` 的指向是什么。
36.7万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
  1. 全局作用域调用
    • 代码:functionA();
    • this指向:在非严格模式下,全局作用域中调用函数,this指向全局对象(在浏览器中是window,在Node.js中是global)。在严格模式下,全局作用域中调用函数,this指向undefined
  2. 对象方法调用
    • 代码:
const obj = {
    func: functionA
};
obj.func();
  • this指向:调用该方法的对象,即obj
  1. 使用call改变this指向
    • 代码:
const newThis = {name: 'newObj'};
functionA.call(newThis);
  • this指向:call方法的第一个参数,即newThis对象。
  1. 使用apply改变this指向
    • 代码:
const newThis = {name: 'newObj'};
functionA.apply(newThis);
  • this指向:apply方法的第一个参数,即newThis对象。applycall的区别在于第二个参数,call后续参数是逐个列出,而apply第二个参数是一个数组(或类数组对象)。
  1. 使用bind改变this指向
    • 代码:
const newThis = {name: 'newObj'};
const boundFunction = functionA.bind(newThis);
boundFunction();
  • this指向:bind方法返回一个新函数,这个新函数内部的this被绑定为bind方法的第一个参数,即newThis对象。bind方法不会立即执行函数,而是返回一个新函数,新函数被调用时,this指向绑定的对象。