首页 > 解决方案 > Javascript中的提升顺序详细

问题描述

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

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

标签: javascripthoistinghoist

解决方案


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

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

let foo;

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

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

当你这样做

console.log(x);

函数在哪里x,您将获得函数源代码,这将与您在脚本中键入的完全相同 - 代码不会以任何方式更改,因此任何“提升”效果都不会可见。


推荐阅读