【发布时间】:2015-12-12 19:46:06
【问题描述】:
arrow function 和 regular function 之间没有明显区别。
({}).toString.call(function () {})
"[object Function]"
({}).toString.call(() => {})
"[object Function]"
或
console.dir( (function () {}) )
function anonymous()
arguments: null
caller: null
length: 0
name: ""
prototype: Object
__proto__: ()
<function scope>
console.dir( (() => {}) )
function anonymous()
arguments: (...)
caller: (...)
length: 0
name: ""
__proto__: ()
<function scope>
虽然两者的行为不同,但有一个有效的用例可以区分两者。
如何以编程方式区分箭头函数和常规函数?
【问题讨论】:
-
所以基本上有一些方法可以知道是否使用匿名函数或箭头函数作为参数?我不认为有类似的东西可用,但也许有?
-
您的答案可能在 this 对象中,因为常规函数将 this 对象分配给自身,但箭头函数将 this 对象分配给箭头函数之外的 this 对象
-
为什么在运行时需要它? “虽然两者的行为不同” --- 相同:它们都接受参数并返回结果。
-
@zerkms 这些只是定义函数行为的两个特性。正如其他人指出的那样,还有更多,例如箭头函数中的词法
this。 -
@GajusKuizinas 没错,但这在运行时对您来说并不重要。作为客户端,您对函数唯一能做的就是传递参数并检索结果。从这个角度来看,它们的行为相同。您将把它应用到什么实际案例中?
标签: javascript