var与let声明变量的区别、const声明常量

一、var与let声明变量的区别

1、使用let声明变量

(1)在ES5中使用var声明变量

        注意:上面第三张图中的V1用var重新声明变量是重新为变量分配所占区域,而不是覆盖,这也使得用var声明变量容易使变量被污染。

        使用var声明变量只支持全局作用域和局部作用域,而放在函数中的变量就是局部变量(局部作用域或函数作用域),此外就是全局变量(全局作用域)。上述的if判断语句中的v1、v2不是在函数中声明的,不满足局部作用域的条件,所以v2、v3都是全局变量,故可以直接输出相应的值。

        上述代码在for循环的条件下不能解决fs[x]=x的问题,原因在于var声明的变量只会在全局作用域或局部作用域中,而在局部作用域fs()中,找不到局部变量i的声明,就只能到全局作用域中找是否存在变量i的声明。此处找到的for循环中使用var声明的全局变量i经过执行后已增加为5,所以无论调用fs[x]();中的x为多少,输出的值都会是5。

(2)在ES6中使用let声明变量

        上面的第四张图中的不存在第三张图中的重复声明的情况,因为使用let声明变量支持块级作用域(也称为代码块作用域),通常情况下,只要存在花括号{}就是一个块级作用域。此处的if判断语句的{}属于块级作用域,在{}里面声明的v6就只能被{}中的语句使用,故输出444,对{}外的v6无影响。而处于{}外的v6应该在全局作用域中找v6的声明,故{}外的v6等于222。

 

        上面代码for循环能解决fs[x]=x的问题,其中的for循环使用let声明变量i,支持块级作用域。在函数作用域fn()中找不到变量i的声明,此时就会到上一级的作用域中继续找变量i的声明,就会找到for循环中的变量i,因为支持块级作用域,故有以下分析过程:

二、const声明常量

1、const声明变量的用法

使用const来声明常量(常量也就是指不能被修改的量),其声明格式与let、var一样。

2、const声明常量的特性

(1)使用const声明常量时一定要赋初始值,就是在声明常量的同时赋予它一个值。

(2)一般定义常量使用大写字母,这是潜规则,并不是语法的要求。

(3)const声明常量时一旦赋初始值后,其值就不能再修改。

(4)const声明常量也支持块级作用域。

(5)特别地,使用const声明常量,对于数组和对象元素的修改,不算做对常量的修改,不会报错。虽然数组或对象的元素发生了变化,但常量数组或对象所指向的地址并没有发生变化。

控制台输出如下:

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值