在下面的程序中,前两个日志运行良好。我在第三个也是最后一个日志中没有做任何新的事情,但不知何故它在运行时崩溃了。我的脚本中的错误在哪里?我已经看了很多次了,它看起来像是对上面经过验证的工作代码的一个相当微不足道的修改。
sumSq = (n) -> ([0..n].map (i) -> i * i).reduce (a, b) -> a + b
sq = (n) -> n * n
sqSum = ((n) -> ([0..n].reduce (a, b) -> a + b))
console.log(sqSum 5)
console.log(sq(sqSum 5))
newSqSum = sq ((n) -> ([0..n].reduce (a, b) -> a + b))
console.log(newSqSum(5))发布于 2012-01-28 12:10:18
这是一个函数,不是一个数字:
(n) -> ([0..n].reduce (a, b) -> a + b)所以当你这么说的时候:
newSqSum = sq ((n) -> ([0..n].reduce (a, b) -> a + b))您使用一个函数作为其参数来调用sq。然后,sq将尝试将该函数与其自身相乘,结果将是NaN,因为函数没有合理的数字表示。最后,您的第三个console.log尝试将该NaN值作为函数调用,这就是您的错误消息。
对于函数f1和f2,某种形式的fn1 fn2不是函数组合,它实际上等同于编写fn1(fn2),除非fn1显式构造为返回函数,否则不会生成新函数。如果你想编写函数,那么我认为你需要手动完成:
newSqSum = (n) -> sq ((n) -> ([0..n].reduce (a, b) -> a + b)) n
# Or with less hate for the people maintaining your code:
newSqSum = (n) -> sq sqSum nhttps://stackoverflow.com/questions/9042759
复制相似问题