当前位置: 首页 > 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指向。

相关文章:

  • 图像测试点列表
  • 【已解决】MACOS M4 芯片使用 Docker Desktop 工具安装 MICROSOFT SQL SERVER
  • Vim 设置搜索高亮底色
  • HBuilder 发行Android(apk包)全流程指南
  • thinkphp8.1 调用巨量广告API接口,刷新token
  • android 之 Tombstone
  • Win10停更,Win11不好用?现在Mac电脑比Win11电脑更便宜
  • RPA+AI:自动化办公机器人开发指南
  • Postman接口测试之postman设置接口关联,实现参数化
  • 第三章:栈与队列
  • Linux C学习路线全概及知识点笔记2(仅供个人参考)
  • OGG-01635 OGG-15149 centos服务器远程抽取AIX oracle11.2.0.4版本
  • 曼昆《经济学原理》(第9版)微观经济学第二章第一节作为科学家的经济学家
  • CVE-2020-17518源码分析与漏洞复现(Flink 路径遍历)
  • Mysql主从复制原理分析
  • c++ 基于openssl MD5用法
  • LeetCode 461.汉明距离
  • AWS 亚马逊 S3存储桶直传 前端demo 复制即可使用
  • 数据结构:泰勒展开式:霍纳法则(Horner‘s Rule)
  • ModuleNotFoundError No module named ‘torch_geometric‘未找到
  • 昆山设计网站的公司/mac蜜桃923色号
  • 网站里的动画效果图/2023年小学生简短小新闻
  • 申请域名建立网站/平台推广费用一般是多少
  • 临朐网站建设建站/软文广告300字范文
  • 庆阳网站设计定制/网站排名查询平台
  • 沙市做网站weisword/企业管理培训课程费用