javascript - Javascript 提升顺序详解

标签 javascript hoisting hoist

问题#1。

我知道“var”是函数范围的,但是javascript是否按字母顺序对葫芦进行排序?或先到先得。

function x () {
    var b;
    var c;
    var a;
}

提升后,结果是变成这样还是和上面的结果一样:

function x() {
    var a;
    var b;
    var c;
}

问题#2。

我知道函数是在变量之前提升的。

当我运行这个时:

function x() {
  var b = 2;
  var c = 3;
  var a = 1;

  function y() {
    var d = 4;
  }
}

console.log(x);

我没有看到“function y()”在变量之前打印。

最佳答案

变量名在提升时“创建”的顺序并不重要,因为只创建一个变量名(在函数声明的情况下,可能除了创建与变量名相关的函数之外)< em>不影响其他任何事情。其中涉及的任何内容都没有任何副作用,因此解释器实际创建变量名称的顺序是不透明且无关的。这是一件好事 - 这意味着您不必担心。

假设您想知道运行时的工作原理,并且没有任何语法错误。如果您确实有语法错误,并且使用constlet声明变量,则禁止在同一范围内对相同变量名进行重复变量声明,因此第一个重复的标识符(与源代码中的顺序相同)将引发语法错误。

let foo;

function foo() { // <-- This line throws
}

I don't see the "function y()" being printed before the vars.

当你这样做时

console.log(x);

其中 x 是一个函数,您只会获得函数源代码,它与您在脚本中键入的代码完全相同 - 代码不是“不会以任何方式改变,因此任何“提升”效果都不会可见。

关于javascript - Javascript 提升顺序详解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58702828/

相关文章:

javascript - 根据特定类后的 div 数量修改 DOM

JavaScript 游戏

Javascript 变量和函数提升

javascript - 同一个变量声明了两次。用的是哪个? -- JavaScript

javascript - 从客户端 (AngularJS) 向 Node.js 服务器发送图像

JavaScript googlemaps 从文件中读取坐标

javascript - 能够在定义之前使用函数表达式

javascript - 如果我想提升 "use",使用函数表达式而不是常规函数声明有缺点吗?

r - 在 unnest_wider 之后命名提升向量中的列