【问题标题】:coffeescript : defining callbacks before they're calledcoffeescript : 在调用之前定义回调
【发布时间】:2013-06-19 17:44:12
【问题描述】:

我正在用 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)

消息打印在控制台上。

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

【问题讨论】:

标签: node.js callback coffeescript


【解决方案1】:

由于 CoffeeScript 函数定义的工作方式,您的第一个 sn-p 相当于 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 中编写。

【讨论】:

  • 是的,我正要链接stackoverflow.com/a/16549446/1375688,但是你是对的。
  • var listener 发生在 server.listen 调用之前,listener = function() { ... } 发生在之后。所以listener 确实存在(或者JavaScript 引擎会给你一个ReferenceError)但它的值是undefined 所以他们实际上是在做server.listen(3000, undefined)。所以你在正确的轨道上,但细节有点偏离。
猜你喜欢
  • 1970-01-01
  • 2023-03-16
  • 2018-04-15
  • 2017-05-07
  • 2017-10-19
  • 2023-03-30
  • 2023-03-28
  • 1970-01-01
  • 2023-03-11
相关资源
最近更新 更多