Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >普通函数和箭头函数的区别

普通函数和箭头函数的区别

原创
作者头像
用户10562852
发布于 2023-05-12 06:51:52
发布于 2023-05-12 06:51:52
42800
代码可运行
举报
文章被收录于专栏:前端不难前端不难
运行总次数:0
代码可运行

1、this指向问题(重要)

MDN的描述是箭头函数不会创建自己的this他只会从自己的作用域链的上一层继承this,这里我们可以理解为this指向外层第一个普通函数(如果没有,则指向全局对象(可通过globalThis访问));而普通函数中this指向其调用者。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let obj = {
    name: 'zs',
    fn: () => {
        // this指向上一级作用域链的this,此处就是 Window 对象(浏览器环境中)
        console.log(this) 
    }
    fn2: function() {
        return () => { console.log(this) }
    }
}
console.log(globalThis) // Window 
obj.fn() // Window 
obj.fn2()() // {name: 'zs', fn: ƒ, fn2: ƒ}

1、箭头函数中的this指向不可以修改,通过 call() apply() 方法调用一个函数时,只能传递参数(不能绑定 this---译者注),他们的第一个参数会被忽略。(这种现象对于 bind 方法同样成立)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let name = 'win'
    let o = {count: 0}
    let obj = {
    fn: (a, b) => {
        console.log(this, a, b)
    }
}
// 可以传参但是第一个参数无效
obj.fn.apply(o, [1, 2]) // Window 1 2

2、不绑定有arguments

但是我们可以使用剩余参数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const fn = (...args) => {
    // console.log(arguments); // 报错:ReferenceError: arguments is not defined
    console.log(args); // [1, 2, 3]
}
fn(1, 2, 3)

3、不能和new一起用,会报错

也就是说箭头函数不能被用作构造函数

4、没有prototype

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const Fn = () => {}
console.log(Fn.prototype) // undefined
let f = new Fn(); // Uncaught TypeError: Fn is not a constructor

以上就是关于箭头函数和普通函数的区别,最重要的就是关于this指向问题,有更多的箭头函数的知识大家可以看看MDN上的内容,里面有很详细的讲解,希望本篇文章能够帮助大家解决一些疑惑,感谢您的观看。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
iOS9.0 友盟分享详细过程
一: 申请友盟的AppKey(友盟的Key是根据应用的名称生成的!) 在友盟注册了你自己的开发者账号后就可以申请AppKey了。然后在这个方法里面设置Key - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [UMSocialData setAppKey:@"*******************"]; //设置
Mr.RisingSun
2018/01/09
7700
UIActivityViewController系统原生分享-仿简书分享
利用UIActivityViewController实现系统原生分享,不需要三方SDK,支持自定义分享,可以分享到微博、微信、QQ、信息、邮件、备忘录、通讯录、剪贴板、FaceBook.....等等
且行且珍惜_iOS
2018/05/22
3.7K0
19.9 添加自定义模板
添加自定义模板 可以自定义一个常用模板,方便给新增主机添加监控项目 自定义aming模板 把其他自带模板里面的某些监控项目(比如cpu、内存等)复制到aming模板里 定义触发器 添加图形 自动发现,
运维小白
2018/02/07
9030
19.9 添加自定义模板
iOS中将图片保存到自定义相册中
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/53412675
用户1451823
2018/09/13
1.2K0
【IOS开发进阶系列】社会化分享SDK专题
http://open.weibo.com/apps/2791886632/info/basic
江中散人_Jun
2023/10/16
2650
【IOS开发进阶系列】社会化分享SDK专题
添加自定义的tabBar
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/51460652
用户1451823
2018/09/13
7090
🔥JavaScript 自定义事件如此简单!
在前端开发世界中,JavaScript 和 HTML 之间往往通过 事件 来实现交互。其中多数为内置事件,本文主要介绍 JS自定义事件概念和实现方式,并结合案例详细分析自定义事件的原理、功能、应用及注意事项。
pingan8787
2020/02/22
1.7K0
手把手教你在 Vue3 中自定义指令
项目前端是 Vue3,前端有这样的一个需求:有一些前端页面上的按钮要根据用户的权限来决定是否展示出来,如果用户具备相应的权限,那么就展示对应的按钮;如果用户不具备对应的权限,那么按钮就隐藏起来。大致上就这样一个需求。 看到这个需求,可能有小伙伴首先想到用 v-if 指令,这个指令确实也能做,但是,由于用户具备的权限一般来说可能是多个,甚至可能还有通配符,所以这个比对并不是一个容易的事情,肯定得写方法。。。所以,如果能用一个指令来实现这个功能,那么就会显得专业很多了。 说干就干,我们来看看 Vue3 中如何自定义指令。
PHP开发工程师
2022/07/26
7830
自定义UITabBar--实现类似新浪微博中间的发送按钮
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/52710240
用户1451823
2018/09/13
6790
iOS小技能: 网络加载中处理、接口暂无数据处理、全局监听用户点击事件
在日常开发中经常涉及数据列表的查询,处理服务侧无数据返回的情况或者网络异常的手段是iOS必备小技能。
公众号iOS逆向
2022/08/22
8450
iOS小技能: 网络加载中处理、接口暂无数据处理、全局监听用户点击事件
(二)c#Winform自定义控件-按钮
GitHub:https://github.com/kwwwvagaa/NetWinformControl
冰封一夏
2019/09/11
1.5K0
(二)c#Winform自定义控件-按钮
iOS开发中支付宝支付的集成(其实很简单)
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/77865207
用户1451823
2018/09/13
8210
微博分享代码怎么显示自定义来源
在很久之前(久到百度分享好用的时候)本站一直在使用百度分享代码,但是不知道从何时起,百度关闭的分享代码的官方,虽说之前的分享代码还是能用,但是总有一种岌岌可危的感受,就怕忽然那一天关闭了接口,网站没有分享了,虽然有了也不见得有人会真的分享哈,但是人就是这样,我可以不用,但是你不能没有,嗯嗯,貌似很有道理,所以前些天把百度的代码更换了本地分享,更换之后发现,微博分享的来源显示“分享代码”,这就很不正规,所以把代码又双叒叕重新折腾一番,终于可以实现自定义微博的小尾巴了,教程开始。
李洋博客
2021/06/15
5860
iOS友盟社会化分享完全攻略
现如今几乎所有人都有社交账号和社交App,而分享功能也几乎随处可见。本文的目的在于介绍分享功能的基本实现。使用的是友盟的社会化分享组件,这样就不用一个一个对接各个平台的接口,可以使用一套接口来实现多个平台的分享功能。本文以分享到微信、QQ、微博为例。
Cloudox
2021/11/23
7410
iOS友盟社会化分享完全攻略
Android:友盟分享升级问题总结
另,千万千万注意,在头脑不清醒,思路不清晰的时候,宁愿休息一会儿,也不要强行改BUG,不然。。。真是一个惨痛的教训!!
CnPeng
2020/08/11
9880
微信小程序Video组件实现视频、自定义播放按钮、封面图、封面图文字demo
在video标签中添加view或cover-view标签,封面图可直接设置video组件的poster属性,自定义按钮和封面图文字包在view中设置定位即可,给自定义按钮绑定点击事件,触发事件后隐藏最外层view,给video绑定bindended事件 设置最外层view显示
peng_tianyu
2022/12/15
3.3K0
微信小程序Video组件实现视频、自定义播放按钮、封面图、封面图文字demo
iOS开发中微信支付集成
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/77881920
用户1451823
2018/09/13
1.8K0
iOS开发中微信支付集成
iOS小技能:自定义导航栏,设置全局导航条外观
在开发需求时app中使用的导航条在一个模块的主题基本是一致的,因此可通过自定义导航条来进行统一控制。
玖柒的小窝
2021/11/02
2.7K0
相关推荐
iOS9.0 友盟分享详细过程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验