该
function声明是魔术,使它的标识符在代码块*中的任何内容执行之前就被绑定了。
这与带有
function表达式的赋值不同,后者以正常的自上而下的顺序求值。
如果将示例更改为说:
var internalFoo = function() { return true; };它将停止工作。
函数声明在语法上与函数表达式完全分开,即使它们看起来几乎相同并且在某些情况下可能是模棱两可的。
这在ECMAscript标准的 10.1.3
节中有说明。不幸的是,即使按照标准标准,ECMA-262也不是一个易读的文档!
*:包含的功能,块,模块或脚本。



