js变量提升是什么意思,js变量提升和函数提升
JavaScript中什么是变量提升?本文带你了解js中的变量推广,并介绍为什么会有变量推广。
js变量提升
JavaScript是单线程语言,所以执行必须是顺序的。但不是逐行分析执行,而是逐段分析执行,先编译阶段后执行阶段。在编译阶段,代码实际执行前的几毫秒,所有的变量和函数声明都会被检测到,所有这些函数和变量声明都会被添加到名为Lexical Environment的JavaScript数据结构中的内存中。所以这些变量和函数可以在实际声明之前使用。
让我们从一个简单的例子开始:
a=2;
var a;
console . log(a);上面的代码会输出什么?如果这段代码从上到下执行,肯定会输出undefined。然而,JavaScript不是自顶向下的执行语言。
这段代码的输出结果是2。出乎意料吗?那么,为什么会这样呢?这个关键点在于-变量提升。他将把当前作用域中所有变量的声明提升到程序的顶部。所以上面的代码相当于下面的代码,这样就能明白一些东西了?
var a;
a=2;
console . log(a);那么我们来看另一个例子:
console . log(a);
var a=2;这段代码会输出什么?2?
实际上,这段代码将输出未定义的内容。这是为什么呢?刚才JavaScript会把变量的声明提升到顶层,但是赋值语句不会。对于js,var a=2分为两步解析:
var a;
a=2;Js只会改进句子var a,所以just语句相当于:
var a;
console . log(a);
a=2;
那么,为什么会有变量提升?
为什么会出现变量提升的现象?
因为js和其他语言一样,都要经历编译和执行的阶段。Js会收集所有变量声明,并在编译阶段提前声明,其他语句不会改变顺序。因此,第一步已经在编译阶段执行了,而第二步是在执行阶段执行语句时执行的。
变量声明
js变量声明大致分为三种:var声明,let和const声明,函数声明。
当一个函数声明与其他声明一起出现时,可能会导致一些冲突。然后我们往下看:
fn();
函数fn () {
console . log( fn );
}
var fn=2;你觉得会出口什么?这样写会不会给你出错?
实际上输出结果是fn。这解释了我们刚才的问题。当函数声明和其他声明一起出现时,谁会占上风?答案是函数声明高于一切,毕竟函数是js的贵族阶级。
那么多函数声明呢?
fn();
函数fn () {
console . log(“1”);
}
函数fn () {
console . log(“2”);
}上面代码的输出结果是2。这是因为有多个函数声明的时候,是由最后的函数声明来替代前面的。
还有最后一个例子:
fn();
var fn=function () {
console . log( fn );
}以上了解之后,再看这个容易吗?和第二个例子一样。var fn=function() {}的格式称为函数表达式。
其实也分两部分:
var fn
fn=function(){ };参考例2,我们可以知道这样做的结果应该是一个错误(因为声明了fn但没有赋值,所以fn是未定义的)。
总结
所以,我们总结一下。
Js会把变量的声明提升到js的顶端来执行。对于var a=2的语句,将进行拆分,提升var a的步长。
变量提升的本质是js引擎在编译的时候声明了所有的变量,所以在执行的时候已经声明了所有的变量。
当有多个同名变量时,函数声明将覆盖其他声明。如果有多个函数声明,最后一个函数声明将覆盖所有前面的声明。
有关编程的更多信息,请访问:编程入门!那么什么是js中的变量推广呢?为什么会有变量推广?更多详情请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。