写点什么

js 中的变量提升和函数提升

作者:北洋
  • 2022 年 6 月 15 日
  • 本文字数:806 字

    阅读完需:约 3 分钟

js 中的变量提升和函数提升

在js中对变量进行操作后打印值经常会出现undefined的现象。其实原因是因为js中有一个叫做变量提升的功能。举例:
复制代码


  var data="lyyyyy";  getData();  function getData(){    //第一次打印    console.log("data值为: ", data);    var  data="yyyyyyy";    //第二次打印    console.log("data值为: ", data);  }
复制代码


打印的值第一个为 undefined,而第二个打印的值为 yyyyy.


原因:在执行getData()方法的时候会在函数内部首先将变量的声明提升到第一步。  然后再声明函数内部的函数(如果函数内部有函数的话)。  之后才会按照方法内部的逻辑先后顺序执行代码。前两步只是声明!!!看到这里应该就已经知道为什么会有上面那样的结果了。
复制代码


实际的方法内部代码执行顺序应该是这样的:


  function getData(){    //一。声明变量    var  data;    //二。声明函数(如果函数内部有函数的话)
//三。按照代码的顺序执行 console.log("data值为: ", data); data="yyyyyyy"; //第二次打印 console.log("data值为: ", data); }
复制代码


看到拆分后的代码执行顺序对结果也就不迷茫了。

为什么有变量提升

==那么为什么会出现变量提升这个现象呢?==


其实 js 和其他语言一样,都要经历编译和执行阶段。而 js 在编译阶段的时候,会搜集所有的变量声明并且提前声明变量,而其他的语句都不会改变他们的顺序,因此,在编译阶段的时候,第一步就已经执行了,而第二步则是在执行阶段执行到该语句的时候才执行。

总结

1.js 会将变量的声明提升到 js 顶部执行,因此对于这种语句:var a = 2;其实上 js 会将其分为 var a;和 a = 2;两部分,并且将 var a 这一步提升到顶部执行。


2.变量提升的本质其实是由于 js 引擎在编译的时候,就将所有的变量声明了,因此在执行的时候,所有的变量都已经完成声明。3.当有多个同名变量声明的时候,函数声明会覆盖其他的声明。如果有多个函数声明,则是由最后的一个函数声明覆盖之前所有的声明。

发布于: 刚刚阅读数: 4
用户头像

北洋

关注

Android开发 2021.05.25 加入

记录Android学习之路 分享读书心得体会~

评论

发布
暂无评论
js中的变量提升和函数提升_android_北洋_InfoQ写作社区