0

私は基本的なnode.js Webサーバーをcoffeescriptで書いています。私が書くとき:

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!"; }

これは問題なく動作しますが、知る限り、CoffeeScript でそれを記述する方法はありません。

于 2013-06-22T20:20:30.903 に答える