js变量提升是什么意思,js变量提升和函数提升

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: