我一直认为浏览器从上到下逐个字符串地执行 JavaScript 代码(你有点期待脚本语言的这种行为)。但显然这里不是这样:
//完美运行
<script>
test();
function test() { alert('test'); }
</script>
但是如果我将函数声明为变量,它会因“未捕获的 ReferenceError:未定义测试”而失败:
<script>
test();
var test = function() { alert('test'); }
</script>
所以javascript引擎有时不会从上到下执行代码。即使最终声明了函数,它也可以以某种方式预加载函数。它究竟是如何工作的,为什么?