我已經知道arrow functions do not have an arguments variable bound to them.這很好,大部分情況下,因爲我可以簡單地使用...
運算符並將參數列表展開到數組中。在箭頭函數中訪問被調用者
但arguments
有一個特殊的屬性arguments.callee
(對當前正在執行的函數的引用),這對遞歸或解綁定偵聽器非常有用。如何從箭頭函數訪問該值?可能嗎?
我已經知道arrow functions do not have an arguments variable bound to them.這很好,大部分情況下,因爲我可以簡單地使用...
運算符並將參數列表展開到數組中。在箭頭函數中訪問被調用者
但arguments
有一個特殊的屬性arguments.callee
(對當前正在執行的函數的引用),這對遞歸或解綁定偵聽器非常有用。如何從箭頭函數訪問該值?可能嗎?
如何從箭頭函數訪問該值?可能嗎?
簡答題是否。
事實上箭頭功能不綁定自己的this
,arguments
,super
......,他們被認爲提供更短的語法,用更少的細節,如果我們檢查MDN Reference for Arrow functions我們可以看到:
箭頭函數表達式的語法比函數表達式短,並且不會綁定它自己的this,arguments,super或new.target。這些函數表達式最適合非方法函數,並且它們不能用作構造函數。
所以,你將無法得到函數本身與Arrow功能的引用,在註釋中規定arguments.callee的「功能」是一個非常糟糕的主意。
只是好奇:爲什麼這是一個壞主意? TBH:真的沒有太多用處,但記住它在當天解決了一些ActionScript問題。 – cwallenpoole
是的,它解決了很多問題,在很多情況下它可以被認爲是非常有用的,但在某些情況下它也可能會導致誤導,例如主要問題是遞歸調用會得到不同的值,您可以看到[更多關於在**這個答案**顯示其不良使用的一個例子](https://stackoverflow.com/a/235760/3669624)。 –
'arguments.callee'「功能」是一個非常糟糕的主意。如果您需要引用該函數,請不要使用箭頭函數並改爲命名函數。 – Pointy
^這和https://stackoverflow.com/questions/30935336/official-information-on-arguments-in-es6-arrow-functions – enapupe
https://stackoverflow.com/questions/103598/why-was-the-參數-called-caller-property-deprecated-in-javascript/235760#235760 – epascarello