javascript - 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()”。
解决方案
提升时“创建”变量名称的顺序无关紧要,因为仅创建变量名称(可能除了创建与变量名称绑定的函数之外,在函数声明的情况下)不会影响别的什么。它所涉及的任何内容都没有任何副作用,因此解释器实际创建变量名的顺序是不透明且不相关的。这是一件好事——这意味着你不必担心它。
那是假设您想知道事情在运行时是如何工作的,并且没有任何语法错误。如果您确实有语法错误并且使用const
or声明变量let
,则禁止在同一范围内为同一变量名重复变量声明,因此第一个重复标识符(与源代码中的顺序相同)将引发语法错误。
let foo;
function foo() { // <-- This line throws
}
我没有看到在 vars 之前打印“函数 y()”。
当你这样做
console.log(x);
函数在哪里x
,您将获得函数源代码,这将与您在脚本中键入的完全相同 - 代码不会以任何方式更改,因此任何“提升”效果都不会可见。