【发布时间】:2013-05-20 15:03:19
【问题描述】:
我一直认为浏览器从上到下逐个字符串地执行 JavaScript 代码(您有点期待脚本语言的这种行为)。但显然这里不是这样:
//完美运行
<script>
test();
function test() { alert('test'); }
</script>
但如果我将函数声明为变量,它会失败并显示“未捕获的 ReferenceError:未定义测试”:
<script>
test();
var test = function() { alert('test'); }
</script>
所以javascript引擎有时不会从上到下执行代码。即使最终声明了函数,它也可以以某种方式预加载函数。 它究竟是如何工作的,为什么?
【问题讨论】:
-
我相信 function(){} 只是一个特例,它被移到了范围的顶部。不过我可能是错的。
-
它在被执行成 like AST 之前被完全解析。这就是为什么您可以在源代码后面看到“语法错误”的原因。
-
看看这里的最佳答案:stackoverflow.com/questions/336859/…
-
A good answer关于吊装主题
标签: javascript