问题#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>不影响其他任何事情。其中涉及的任何内容都没有任何副作用,因此解释器实际创建变量名称的顺序是不透明且无关的。这是一件好事 - 这意味着您不必担心。
假设您想知道运行时的工作原理,并且没有任何语法错误。如果您确实有语法错误,并且使用const
或let
声明变量,则禁止在同一范围内对相同变量名进行重复变量声明,因此第一个重复的标识符(与源代码中的顺序相同)将引发语法错误。
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/