【问题标题】:Order of hoisting in Javascript detailedJavascript中的提升顺序详细
【发布时间】:2019-11-05 00:22:47
【问题描述】:

问题 #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);

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

【问题讨论】:

  • 吊装没有顺序,因为它在语言级别上是不可观察的。

标签: javascript hoisting hoist


【解决方案1】:

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

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

let foo;

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

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

当你这样做时

console.log(x);

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

【讨论】:

    猜你喜欢
    • 2015-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多