当前位置: 首页 > news >正文

箭头函数和普通函数的this指向

目录

前言

一、题目1(基础题)

二、‌题目2(箭头函数对比)

三、题目3(setTimeout中的this)

四、题目4(箭头函数修复this)

五、‌题目5(构造函数中的this)

六、题目6(方法赋值后的this)

总结


前言

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、题目1(基础题)

const obj = {name: 'Alice',sayName: function() {console.log(this.name);}
};
obj.sayName(); // 输出什么?为什么?

 答:输出Alice,普通函数的this由调用者决定,obj.sayName()obj是调用者,因此this指向obj

二、‌题目2(箭头函数对比)

const obj = {name: 'Bob',sayName: () => {console.log(this.name);}
};
obj.sayName(); // 输出什么?为什么?

 答:输出undefined,箭头函数自身没有this,继承自外层作用域(此处是全局作用域),浏览器中全局this指向window,而window.name未定义

三、题目3(setTimeout中的this)


const obj = {name: 'Charlie',sayName: function() {setTimeout(function() {console.log(this.name);}, 100);}
};
obj.sayName(); // 输出什么?为什么?

答:输出window,setTimeout中普通函数指向window,window.name为undefined 

四、题目4(箭头函数修复this)

const obj = {name: 'David',sayName: function() {setTimeout(() => {console.log(this.name);}, 100);}
};
obj.sayName(); // 输出什么?为什么?

答:输出David,setTimeout中为箭头函数,他的this为外层作用域sayName函数的this指向,而obj调用了sayName,所以指向obj,obj.name为David 

五、‌题目5(构造函数中的this)

function Person(name) {this.name = name;this.sayName = () => {console.log(this.name);};
}
const p = new Person('Eve');
p.sayName(); // 输出什么?为什么?

答:输出Eve,箭头函数this为外层作用域的this指向,此时为Person类,而new Person使得构造函数指向new出来的实例对象,所以为Eve

六、题目6(方法赋值后的this)

const obj = {name: 'Frank',sayName: function() {console.log(this.name);}
};
const fn = obj.sayName;
fn(); // 输出什么?为什么?

答:输出undefined,fn在全局作用域下,所以此时调用函数则this指向window,window.name为undefined 

总结

只需要记住:普通函数是谁调用就指向谁,箭头函数没有自身this,他是根据外层作用域定义时的this指向。

http://www.xdnf.cn/news/891037.html

相关文章:

  • BLE中心与外围设备MTU协商过程详解
  • 炫云:为驱动数字视觉产业升级保驾护航
  • 【设计模式-4.11】行为型——解释器模式
  • centos实现SSH远程登录
  • 分布式一致性原理及一致性协议
  • AI数字人小程序开发,重塑商业服务新模式
  • 6个月Python学习计划 Day 15 - 函数式编程、高阶函数、生成器/迭代器
  • 分析vban的utlis中的helper方法(1)——数组
  • 【技术笔记】AI Agent 项目 SUNA 部署:MSYS2 环境中 Python 版本从 3.12 降级至 3.11 的实操指南
  • place 布局管理器
  • java使用文本相似度检测可以调整阈值
  • Redis 配置与优化
  • LAUNCHXL-F28379D SCI中断配置
  • 什么是数据孤岛?如何实现从数据孤岛到数据共享?
  • java.io.IOException: Broken pipe
  • leetcode 1061. 按字典序排列最小的等效字符串 中等
  • js 比较两个对象的值是否相等
  • 【数据集】MODIS 8日合成1公里地表温度LST产品
  • Ubuntu20.04配置静态ip
  • 摄像头模块未来技术发展方向
  • 行业赋能篇-2-能源行业安全运维升级
  • MLP(多层感知机)
  • 算法复杂度,咕咕咕
  • 晨读笔记 6-5 (主题:打造15分钟就业服务圈)
  • SpringBoot+Mysql实现的停车场收费小程序系统+文档
  • GPU显存的作用和如何选择
  • 带有输入的CDS和程序调用
  • 极限c++模拟卷
  • 使用 Run:ai Model Streamer 实现模型的高效加载
  • JAVASCRIPT 简化版数据库--智能编程——仙盟创梦IDE