首页 > 其他分享 >深入理解var、let、const

深入理解var、let、const

时间:2022-11-21 22:01:01浏览次数:32  
标签:index const let var 执行 表达式

先看一下var、let、const基本的异同,再详细的介绍这三个东西:

1、var存在变量提升,let和const

2、var一个变量可多次声明,后面的声明会覆盖前面的声明,let、const不能

3、在函数中var声明变量,该变量是局部的,而如果在函数内不使用var,该变量是全局的。let和const只在块级作用域内有效

 var a = 10
 function fn() {
   var a = 20
 }
 fn()
 console.log(a) // 20

如果函数中没有重新var,则最后拿到的a的值为10

4、var和let可先声明后赋值,且变量的值可修改。const必须声明即赋值,声明的变量值不可修改(声明引用数据类型的值可修改,比如:对象、数组。原因见下)

注:基本数据类型存在栈中,const不可修改,引用数据类型在栈中存的是指向堆的地址,在堆中存的是对象和数组中的数据,const不能修改指针,所以不能直接改变对象,只能改变对象中的属性值。

使用: 能用const的情况下尽量使用const,大多数情况使用let,避免使用var。 const > let > var   扩展:let和var在for循环中的不同
for (let index = 0; index < 3; index++) {
    setTimeout(() => {
        console.log(index)
    }, 1000);
}
// 0
// 1
// 2

for (var i = 0; i < 10; i++) {
    setTimeout(() => {
        console.log(i, 'qqq')
    }, 1000);
}
// 3
// 3
// 3

let index
for (index = 0; index < 3; index++) {
    setTimeout(() => {
        console.log(index)
    }, 1000);
}
// 3
// 3
// 3

这两个的不同就是因为var存在变量声明提升,第三个例子就相当于var

顺便补一下for循环的执行顺序:

for(表达式1; 表达式2; 表达式3){
    语句块
}

它的运行过程为:
1) 先执行“表达式1”。
2) 再执行“表达式2”,如果它的值为真(非0),则执行循环体,否则结束循环。
3) 执行完循环体后再执行“表达式3”。
4) 重复执行步骤 2) 和 3),直到“表达式2”的值为假,就结束循环。
上面的步骤中,2) 和 3) 是一次循环,会重复执行,for 语句的主要作用就是不断执行步骤 2) 和 3)。


“表达式1”仅在第一次循环时执行,以后都不会再执行,可以认为这是一个初始化语句。“表达式2”一般是一个关系表达式,决定了是否还要继续下次循环,称为“循环条件”。“表达式3”很多情况下是一个带有自增或自减操作的表达式,以使循环条件逐渐变得“不成立”。

 

 

 

 

标签:index,const,let,var,执行,表达式
From: https://www.cnblogs.com/mengzekun/p/16908405.html

相关文章

  • MATLAB用GARCH-EVT-Copula模型VaR预测分析股票投资组合
    全文链接:http://tecdat.cn/?p=30426原文出处:拓端数据部落公众号对VaR计算方法的改进,以更好的度量开放式基金的风险。本文把基金所持股票看成是一个投资组合,引入Copula来......
  • Servlet_概述、快速入门
    Servlet_概述server applet概念:运行在服务器端的小程序Servlet就是一个接口,定义了java类被浏览器访问到(tomcat识别)的规则将......
  • Qt QVariant的用法
    前言QVariant这个类很神奇,或者说方便。很多时候,需要几种不同的数据类型需要传递,如果用结构体,又不大方便,容器保存的也只是一种数据类型,而QVariant则可以统统搞定。介绍......
  • Qt QVariant与Json的各种纠葛
    前言我之前虽了解QVariant的一些性能,但是没有与Json各种的互转。以前我解析Json后,是将其转化为我自定义的结构体,既方便看,又方便调用,就是解析转换的时候麻烦些;后续看到......
  • COLA_constant overlap add 无损重建信号 记忆
    进行把信号切割fft,istft完全还原成时域信号的类似操作时,信号窗口遵循“ConstantOverLapAdd”(COLA)的约束就足够了,这确保输入数据中的每个点都具有相同的权重,从而避免混......
  • ConstraintLayout提高-下
    bias的使用这个不一定在中间可以改变力的大小<TextViewandroid:layout_width="100dp"android:layout_height="50dp"android:backgrou......
  • 【Jmeter】21天打卡 08之取样器之http请求方法get/delete/put之间的请求
    1.新建测试计划-线程组-取样器(http请求三个,分别为get请求,put请求,delete请求)-添加监听器(查看结果树)2.在get请求中输入www.httpbin.org,接口为get,请求方法为:get请求内容:ge......
  • Spring扩展点之SmartInitializingSingleton接口
    执行时机SmartInitializingSingleton主要用于在IoC容器基本启动完成时进行扩展,这时非Lazy的Singleton都已被初始化完成。所以,在该扩展点执行ListableBeanFactory#getBeans......
  • variables.scss
    //颜色$colors:("primary":#db9e3f,"info-1":#4394e4,"info":#4b67af,"white":#ffffff,"light":#f9f9f9,"grey-1":#999999,"grey":#666666......
  • valet7.1php与本地nginxphp5.6切换操作,以及共存
    一、/usr/local/etc/nginx/nginx.conf不注释,用valet启动、停止默认访问本地项目是php5.6访问valet项目是7.1【解释】:因为本地配置的xxx.conf是在nginx/sites-enabled/......