立即调用命名函数

时间:2014-02-26 00:57:16

标签: coffeescript

我的一位朋友今天向我提出了一个有趣的问题,即如何在CoffeeScript中立即调用已调用的命名函数,而不将函数变量提升到外部范围。

在JavaScript中:

(function factorial(n) { return n <= 1 ? 1 : n * factorial(n-1); })(5);

我可以在CoffeeScript中找到最好的东西:

do -> do factorial = (n = 5) ->
    if n <= 1 then 1 else n * factorial(n-1)

看起来有点尴尬。有更好的方法吗?

1 个答案:

答案 0 :(得分:4)

你做不到。 CoffeeScript doesn’t support this kind of thing at all,但通过内联JavaScript除外:

result = `(function factorial(n) {`
return if n <= 1 then 1 else n * factorial(n-1)
`})(5)`

(也不允许缩进。)CoffeeScript也会为你插入一些分号,所以不要在表达式上下文中使用它。

然后......

-> if n <= 1 then 1 else n * arguments.callee n-1

(不要这样做)