箭头函数与普通函数,以及使用场景
鏈接
箭頭函數(shù)和普通函數(shù)的區(qū)別如下。
普通函數(shù):根據(jù)調(diào)用我的人(誰調(diào)用我,我的this就指向誰)
箭頭函數(shù):根據(jù)所在的環(huán)境(我再哪個環(huán)境中,this就指向誰)
一針見血式總結(jié):
普通函數(shù)中的this:
2.在默認情況(非嚴格模式下,未使用 ‘use strict’),沒找到直接調(diào)用者,則this指的是 window (常見的window的屬性和方法有: alert, location,document,parseInt,setTimeout,setInterval等)(約定俗成)
3.在嚴格模式下,沒有直接調(diào)用者的函數(shù)中的this是 undefined
4.使用call,apply,bind(ES5新增)綁定的,this指的是 綁定的對象
箭頭函數(shù)中的this
箭頭函數(shù)沒有自己的this, 它的this是繼承而來; 默認指向在定義它時所處的對象(宿主對象),而不是執(zhí)行時的對象, 定義它的時候,可能環(huán)境是window; 箭頭函數(shù)可以方便地讓我們在 setTimeout ,setInterval中方便的使用this
要整明白這些, 我們需要首先了解一下作用域鏈:
當在函數(shù)中使用一個變量的時候,首先在本函數(shù)內(nèi)部查找該變量,如果找不到則找其父級函數(shù),
最后直到window,全局變量默認掛載在window對象下
使用場景
箭頭函數(shù)適合于無復(fù)雜邏輯或者無副作用的純函數(shù)場景下,例如:用在 map、reduce、filter 的回調(diào)函數(shù)定義中
箭頭函數(shù)的亮點是簡潔,但在有多層函數(shù)嵌套的情況下,箭頭函數(shù)反而影響了函數(shù)的作用范圍的識別度,這種情況不建議使用箭頭函數(shù)
箭頭函數(shù)要實現(xiàn)類似純函數(shù)的效果,必須剔除外部狀態(tài)。所以箭頭函數(shù)不具備普通函數(shù)里常見的 this、arguments 等,當然也就不能用 call()、apply()、bind() 去改變 this 的指向
箭頭函數(shù)不適合定義對象的方法(對象字面量方法、對象原型方法、構(gòu)造器方法),因為箭頭函數(shù)沒有自己的 this,其內(nèi)部的 this 指向的是外層作用域的 this
總結(jié)
以上是生活随笔為你收集整理的箭头函数与普通函数,以及使用场景的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Julia 数学运算和初等函数
- 下一篇: Matlab App Designer