究竟是如何解释JavaScript的?

时间:2013-05-24 22:54:18

标签: javascript

我一直认为浏览器会逐个字符串地从上到下执行JavaScript代码(您希望这种行为来自脚本语言)。但显然情况并非如此:

//完美无缺

<script>
  test();
  function test() { alert('test'); }
</script>

但是如果我将函数声明为变量,它将失败并显示'未捕获的ReferenceError:未定义测试':

<script>
  test();
  var test = function() { alert('test'); }
</script>

因此javascript引擎有时不会从上到下执行代码。它可以以某种方式预加载函数,即使它们最终被声明。 它究竟是如何工作的?为什么?

1 个答案:

答案 0 :(得分:9)

这是函数和变量提升的示例:函数和变量声明被移动到当前范围的顶部。

您的示例在内部转换为:

案例1:

<script>
  function test() { alert('test'); }
  test();
</script>

案例2:

<script>
  var test;
  test();
  test = function() { alert('test'); }
</script>

由此可以推断,在第二种情况下,当您尝试执行变量test时,它是未定义的。