带你读《现代Javascript高级教程》三、函数上下文和this关键字(2)

简介: 带你读《现代Javascript高级教程》三、函数上下文和this关键字(2)

带你读《现代Javascript高级教程》三、函数上下文和this关键字(1)https://developer.aliyun.com/article/1349696?groupCode=tech_library


5. 函数调用时使用 call 或 apply

考虑以下脚本:

 

function greet() {
  return `Hello, ${this.name}!`;}
const person = {
  name: 'Alice'};
console.log(greet.call(person));  // 使用call
console.log(greet.apply(person)); // 使用apply

 

输出结果:

  • 使用 call:Hello, Alice!
  • 使用 apply:Hello, Alice!

 

解析: 通过使用函数的 call apply 方法,可以显式地指定函数执行时的上下文,即 this 的值。在上述代码中,greet.call(person) greet.apply(person) 中的 this 都被绑定到了 person 对象,所以打印出的结果都是 Hello, Alice!

 

6. 箭头函数的上下文

箭头函数的 this 绑定与常规函数不同,箭头函数没有自己的 this 值,而是捕获了封闭上下文的 this 值。考虑以下脚本:

 

const obj = {
  name: 'Bob',
  greet: function() {
    const arrowFunc = () => {
      return `Hello, ${this.name}!`;
    };
    return arrowFunc();
  }};
console.log(obj.greet());

 

输出结果:Hello, Bob!

 

解析: 在这段代码中,箭头函数 arrowFunc 没有自己的 this 值,而是捕获了封闭上下文 greet 函数中的 this 值,即 obj 对象。所以 this.name 实际上指向 obj.name,打印出 Hello, Bob!

 

这就是 JavaScript 函数上下文和 this 关键字的一些重要概念和用法。

相关文章
|
4天前
|
JavaScript 前端开发 C++
【Web 前端】JavaScript window.onload 事件和 jQuery ready 函数有何不同?
【5月更文挑战第2天】【Web 前端】JavaScript window.onload 事件和 jQuery ready 函数有何不同?
|
4天前
|
JavaScript 前端开发
JavaScript 关键字
【5月更文挑战第2天】JavaScript 关键字。
14 2
|
5天前
|
JavaScript 前端开发
<body> 中的JavaScript函数
【5月更文挑战第1天】<body> 中的JavaScript函数。
8 3
|
5天前
|
JavaScript 前端开发
<head> 中的JavaScript 函数
【5月更文挑战第1天】<head> 中的JavaScript 函数。
8 2
|
7天前
|
JavaScript
变量和函数提升(js的问题)
变量和函数提升(js的问题)
|
7天前
|
JSON JavaScript 前端开发
深入探讨javascript的流程控制与分支结构,以及js的函数
深入探讨javascript的流程控制与分支结构,以及js的函数
|
7天前
|
JavaScript 前端开发 容器
|
8天前
|
存储 JavaScript 前端开发
每日一道javascript面试题(九)函数的参数可以和函数体中的变量重名吗
每日一道javascript面试题(九)函数的参数可以和函数体中的变量重名吗
|
8天前
|
JavaScript 前端开发
每日一道javascript面试题(七)你真的知道箭头函数吗
每日一道javascript面试题(七)你真的知道箭头函数吗
|
8天前
|
JavaScript 前端开发
javascript中new关键字的本质是什么
javascript中new关键字的本质是什么