socket.iorealtime 中,存在两种函数声明方式:

  1. var handler = function(req, res):这种写法定义的是一个函数表达式,必须在定义之后才能调用,因为变量声明在代码执行时被提升,但函数体的赋值不会被提升,因此调用时,handler 的值为 undefined,导致报错。

  2. function handler(req, res):这种写法是函数声明,支持函数提升,意味着可以在函数定义之前调用,因为整个函数声明会被提升到作用域顶部,因此可以先使用后声明。

  3. 第一种方式是通过变量定义函数,声明提前但赋值未提升,导致函数未定义时不可调用。

  4. 第二种方式是函数声明,函数定义和声明一起提升,允许在声明前调用。

代码示例:


function foo(x) {

  console.log(tmp);  // 输出 undefined

  if (x > 100) {

    var tmp = x - 100;

  }

}

foo(1000);