我的一位朋友今天向我提出了一个有趣的问题,即如何在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)
看起来有点尴尬。有更好的方法吗?
答案 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
(不要这样做)