JS箭头函数使用有哪些事项要注意,具体怎么应用
Admin 2022-07-06 群英技术资讯 321 次浏览
箭头函数是ES6中的新增特性,他没有自己的this,其this指向从外层代码库继承。
使用箭头函数时要注意一下几点:
PS: 实际开发环境中,React可以使用箭头函数解决一个经典问题,这里不细说了。
给一个例子看一下箭头函数的实际情况:
const obj = { fun1: function () { console.log(this); return () => { console.log(this); } }, fun2: function () { return function () { console.log(this); return () => { console.log(this); } } }, fun3: () => { console.log(this); } } let f1 = obj.fun1(); // obj f1() // obj let f2 = obj.fun2(); let f2_2 = f2(); // window f2_2() // window obj.fun3(); // window
针对每行输出的分析:
let f1 = obj.fun1() // obj
这里明显进行的是隐式绑定,fun1的this指向obj
f1() // obj
这里执行了上一行返回出来的箭头函数,我们分析上一层代码库的this指向obj,所以直接继承,箭头函数this指向
objlet f2 =obj.fun2()
fun2第一层执行的时候没有打印代码,而是返回了一个函数出来,赋值给f2,并且这里发生了绑定丢失,this指向由原来的obj指向了window(发生了赋值)
let f2_2 = f2() // window
f2()执行了,打印出了改绑后的this——window,然后将箭头函数返回出来,赋值给f2_2f
2_2() // window
执行打印出window,刚才的外层代码的this不是指向了window吗,所以这里就继承了window作为this
obj.fun3() // window
在字面量中直接定义的箭头函数无法继承该对象的this,而是往外再找一层,就找到了window,因为字面量对象无法形成自己的一层作用域,但是构造函数可以哦。
那我们怎么操纵箭头函数的this指向呢:
答案是修改外层代码库的this指向,在箭头函数定义之前就给this修改方向即可。
在以上代码的基础上:
let fun4 = f2.bind(obj)() // obj fun4() // obj
我们发现修改的是第二层方法的this指向,并且箭头函数也继承了下来。
fun2: function () { return function () { // 我们修改的是这里的this console.log(this); return () => { // 然后这里定义的时候就继承啦 console.log(this); } } },
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
JS有哪些高效的魔法运算符?对于JS运算符大家应该都比较熟悉,但JavaScript在不断更新,也会增加不少高效的运算法,这篇文章给大家分享一些高效的魔法运算符,感兴趣的朋友就继续往下看吧。
在本篇文章里小编给大家整理的是一篇关于nodejs插件及用法相关内容,有兴趣的朋友们可以跟着学习参考下。
jQuery中让input框失去焦点的方法:1、利用“$("input元素")”语句来获取input元素对象;2、利用blur()方法让input元素对象失去焦点即可,语法为“元素对象.blur()”。
windows下怎么安装node版本管理工具(nvm)?下面本篇文章给大家介绍一些安装nvm工具踩的坑,以及解决方法,希望对大家有所帮助!
reverse可以颠倒数组中元素的顺序。sort按升序排列数组项即最小值在最前面,最大值在最后面。为实现排序,sort会调用每个数组项的toString,然后比较得到的字符串,以确定如何排
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008