我试图在CoffeeScript中做一些函数式编程并写了一个currying函数:
curry = (func, ref=null, length=func.length) ->
(args...) ->
if args.length >= length
func.apply ref, args
else
curry (func.bind ref, args), ref, length - args.length
很自然地,我用这个简单的add
函数来测试它:
add = (a, b) ->
a + b
alert add 3.1, -2
alert (curry add)(3.1)(-2)
未经审核的add
按预期返回1.1
,但咖喱add
返回"3.1-2"
。出于某种原因,在有条件的add
内,typeof a
更改了对象,而typeof b
仍为数字。我已经跟踪了bind
调用的所有类型,这使我得出结论Function.prototype.bind
正在将数字转换为对象。
为什么会发生这种情况,我该怎么做才能阻止类型转换?