【问题标题】:How exactly is JavaScript interpreted? [duplicate]JavaScript 究竟是如何解释的? [复制]
【发布时间】: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


【解决方案1】:

这是一个函数和变量提升的例子:函数和变量声明被移动到当前作用域的顶部。

您的示例在内部转换为:

案例一:

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

案例 2:

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

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

【讨论】:

    猜你喜欢
    • 2013-04-11
    • 2017-10-07
    • 1970-01-01
    • 2012-01-26
    • 2019-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    相关资源
    最近更新 更多