javascript关于变量提升的问题

2021/7/4 22:50:22

本文主要是介绍javascript关于变量提升的问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

js在声明一个变量时(var foo= 1)会分两步走。

第一步是var foo,(这一步是在为这个变量开辟一处内存空间并命名)
第二步是foo= 1,(这一步则是为开辟好并命了名的内存空间赋值)

但这两步并不是同时进行的,var foo这一步是在编译阶段进行,而foo= 1则是在执行阶段进行。简单来说,就是var foo这步是在浏览器一行行读js代码前执行的,而foo= 1则是留在你写的位置等待被执行的。所以如果代码里有不少变量,那么代码的一开始其实是这样的

var foo;
var a;
let b;
const c;

接下来就是等浏览器到读js代码到foo= 1时,才会为foo这个变量附上值
而先为变量声明内存空间后赋值的这个行为就被称为变量提升

这就解释了为什么下面代码会打印undefined

console.log( a );//undefined
var a = 2;

因为实际上代码是这样的

var a;
console.log(a);
a= 2;

这样已经声明了a却没有为a赋值,自然会输出undefined

只有声明本身会被提升,而赋值或其他运行逻辑会留在原地。如果提升改变
了代码执行的顺序,会造成非常严重的破坏!

by the way, 是在var foo =1这句代码的定义域里提升,不会全部变量提升到最大的那个定义域



这篇关于javascript关于变量提升的问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程