javascript - JavaScript 究竟是如何解释的?

标签 javascript

<分区>

我一直认为浏览器会逐个字符串从上到下执行 JavaScript 代码(您可能希望脚本语言具有这种行为)。但显然这里不是这种情况:

//工作完美

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

但是如果我将函数声明为变量,它会失败并显示“ Uncaught ReferenceError :未定义测试”:

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

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

最佳答案

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

您的示例在内部转换为:

案例一:

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

案例二:

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

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

关于javascript - JavaScript 究竟是如何解释的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16744665/

相关文章:

javascript - 获取 URL 参数以使用 jQuery 或 javascript 修改选择表单

javascript - -webkit-appearance 不消失

javascript - 我不知道如何从 fetch 中正确获取数据

javascript - Canvas 圆圈碰撞,如何计算出碰撞后圆圈应该移动到哪里?

javascript - ECMAScript 2015 很好的包装 CasperJS 方法的方法。

javascript - JS 在对象数组上使用indexOf

javascript - d3.js 序数轴未正确更新

javascript - 什么是 HTML5 元素的 getCSSCanvasContext() 方法?

javascript - 将 PHP 变量传递给 Javascript 不起作用

javascript - ElectronJS : logging method fires multiple times when don't wanted when using invoke/handle