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关于变量提升的问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-28AI给的和自己写的Python代码,都无法改变输入框的内容,替换也不行
- 2024-09-27Sentinel配置限流资料:新手入门教程
- 2024-09-27Sentinel配置限流资料详解
- 2024-09-27Sentinel限流资料:新手入门教程
- 2024-09-26Sentinel限流资料入门详解
- 2024-09-26Springboot框架资料:初学者入门教程
- 2024-09-26Springboot框架资料详解:新手入门教程
- 2024-09-26Springboot企业级开发资料:新手入门指南
- 2024-09-26SpringBoot企业级开发资料新手指南
- 2024-09-26Springboot微服务资料入门教程