在 socket.io 的 realtime 中,存在两种函数声明方式:
-
var handler = function(req, res):这种写法定义的是一个函数表达式,必须在定义之后才能调用,因为变量声明在代码执行时被提升,但函数体的赋值不会被提升,因此调用时,
handler
的值为undefined
,导致报错。 -
function handler(req, res):这种写法是函数声明,支持函数提升,意味着可以在函数定义之前调用,因为整个函数声明会被提升到作用域顶部,因此可以先使用后声明。
-
第一种方式是通过变量定义函数,声明提前但赋值未提升,导致函数未定义时不可调用。
-
第二种方式是函数声明,函数定义和声明一起提升,允许在声明前调用。
代码示例:
function foo(x) {
console.log(tmp); // 输出 undefined
if (x > 100) {
var tmp = x - 100;
}
}
foo(1000);
暂无评论