箭头函数
第一组情景:
//setTimeout的第一个参数是一个函数
setTimeout(function(){console.log('这是一个普通函数'+this)},1000)
setTimeout(()=>{console.log('这是一个箭头函数'+this)},1000)
输出的结果为:
这是一个普通函数[object Window]
这是一个箭头函数undefined
第二组情景:
这是使用了React向页面中渲染两个按钮
<button onClick={function(){console.log(this)}}>点击function</button>
<button onClick={()=>{console.log(this)}}>点击()=>{}</button>
输出的结果为:
依次点击点击function、点击()=>{}按钮
EventTest是我创建的一个组件
undefined
EventTest {props: {…}, context: {…}, refs: {…}, updater: {…}, click: ƒ, …}
解析:
- 在第一组场景中
当没有使用箭头函数时,this的指向是接收函数的对象
因为setTimeout是Window的方法,函数的完整写法应该是window.setTimeout,所以这里的this是Window(接收函数的对象)
当使用了箭头函数时,this的指向是所在对象上一级的对象,在这里的window.setTimeout中并没有上一级的对象,所以这里的this是undefined(所在对象上一级的对象) - 在第二组场景中
没有使用箭头函数的按钮,这里的this指向的就是接收函数的对象,而这里的对象是一个jsx语法组成的虚拟DOM对象,这个对象并没有提供this,所以这里的this是undefined
使用了箭头函数的按钮,这里的this指向的是所在对象上一级的对象,这里的对象是一个jsx语法组成的虚拟DOM对象,而这个虚拟DOM对象属于class EventTest这个类,而这个类有提供this,所以这里的this是EventTest
总结:
箭头函数使用来解决this指向问题的
使用了箭头函数,this的指向就会由原来的接收函数的对象,变为上一级的对象,这样可以使得方法的this都指向根对象,使得方法都可以访问根对象上的数据或方法
|你知道的越多,不知道的越多。 |如果本文章内容有问题,请直接评论或者私信我。如果觉得写的还不错的话,点个赞也是对我的支持哦。 |未经允许,不得转载!|微信搜【程序员徐小白】,关注即可第一时间阅读最新文章。回复【面试题】有我准备的50道高频校招面试题,以及各种学习资料。

浙公网安备 33010602011771号