2017-06-21 50 views
3

我已經知道arrow functions do not have an arguments variable bound to them.這很好,大部分情況下,因爲我可以簡單地使用...運算符並將參數列表展開到數組中。在箭頭函數中訪問被調用者

arguments有一個特殊的屬性arguments.callee(對當前正在執行的函數的引用),這對遞歸或解綁定偵聽器非常有用。如何從箭頭函數訪問該值?可能嗎?

+3

'arguments.callee'「功能」是一個非常糟糕的主意。如果您需要引用該函數,請不要使用箭頭函數並改爲命名函數。 – Pointy

+0

^這和https://stackoverflow.com/questions/30935336/official-information-on-arguments-in-es6-arrow-functions – enapupe

+0

https://stackoverflow.com/questions/103598/why-was-the-參數-called-caller-property-deprecated-in-javascript/235760#235760 – epascarello

回答

2

如何從箭頭函數訪問該值?可能嗎?

簡答題是

事實上箭頭功能不綁定自己的thisargumentssuper ......,他們被認爲提供更短的語法,用更少的細節,如果我們檢查MDN Reference for Arrow functions我們可以看到:

箭頭函數表達式的語法比函數表達式短,並且不會綁定它自己的this,arguments,super或new.target。這些函數表達式最適合非方法函數,並且它們不能用作構造函數。

所以,你將無法得到函數本身與Arrow功能的引用,在註釋中規定arguments.callee的「功能」是一個非常糟糕的主意

+0

只是好奇:爲什麼這是一個壞主意? TBH:真的沒有太多用處,但記住它在當天解決了一些ActionScript問題。 – cwallenpoole

+0

是的,它解決了很多問題,在很多情況下它可以被認爲是非常有用的,但在某些情況下它也可能會導致誤導,例如主要問題是遞歸調用會得到不同的值,您可以看到[更多關於在**這個答案**顯示其不良使用的一個例子](https://stackoverflow.com/a/235760/3669624)。 –

相關問題