“为什么?”;a();函数a(){}";用javascript工作?但大多数其他动态语言都没有

“为什么?”;a();函数a(){}";用javascript工作?但大多数其他动态语言都没有,javascript,node.js,Javascript,Node.js,可能重复: 上面的代码在nodejs中不起作用。我想知道javascript和python/ruby处理这种情况的根本区别。因为在javascript中,[[FunctionDeclaration]]s被提升(包括初始化)到当前词法范围的顶部。因此,您可以在词法范围内的任何位置调用它们(甚至在“定义”它们之前) 如果您对确切的过程感兴趣,请随时查看规范:,因为在JavaScript中,[[FunctionDeclaration]]s被提升(包括初始化)到当前词法范围的顶部。因此,您可以在词法范

可能重复:

上面的代码在nodejs中不起作用。我想知道javascript和python/ruby处理这种情况的根本区别。

因为在javascript中,[[FunctionDeclaration]]s被提升(包括初始化)到当前词法范围的顶部。因此,您可以在词法范围内的任何位置调用它们(甚至在“定义”它们之前)

如果您对确切的过程感兴趣,请随时查看规范:

,因为在JavaScript中,[[FunctionDeclaration]]s被提升(包括初始化)到当前词法范围的顶部。因此,您可以在词法范围内的任何位置调用它们(甚至在“定义”它们之前)


如果您对确切的过程感兴趣,请随时查看规范:

+1以实际了解吊装。令人惊讶的是,有多少人不明白。然而,这只适用于声明为
function foo(){}
的函数,而不是那些声明为
foo=function(){}
@Kolink是正确的,函数表达式被提升,但只有变量定义(如果适用),函数的实例化不会像函数声明那样被提升。+1用于实际理解提升。令人惊讶的是,有多少人不明白。然而,这只适用于声明为
function foo(){}
的函数,而不是那些声明为
foo=function(){}
@Kolink是正确的,函数表达式被提升,但只有变量定义(如果适用),函数的实例化不会像函数声明那样被提升。