0

我正在使用 coffeescript 编写一个基本的 node.js Web 服务器。当我写:

server.listen(3000, listener)
listener = () ->
  console.log 'server listening on port 3000'

它启动服务器,但不打印消息。所以我收集到回调没有被调用。另一方面,当我这样做时:

listener = () ->
  console.log 'server listening on port 3000'
server.listen(3000, listener)

消息打印在控制台上。

如果回调是在调用之前定义的,为什么回调会被调用,但如果它是在之后定义的则不会?

4

1 回答 1

2

由于 CoffeeScript 函数定义的工作方式,您的第一个代码段相当于 JavaScript 中的类似内容:

var message;
console.log(message()); // message is undefined at this point
message = function() { return "Hello World!"; };

message首次访问时不存在,因此会引发错误。听起来你想要:

console.log(message());
function message() { return "Hello World!"; }

效果很好,但是 AFAIK,没有办法在 CoffeeScript 中编写它。

于 2013-06-22T20:20:30.903 回答