const只读什么意思

2023-03-29 14:04 35次浏览 攻略

停更了很久,今天,我猿叨叨又回来啦!!!

你不了解的ES6

今天起,开始更新你不了解的ES6系列,主要是一些重要的基础知识点。大神请自觉忽略,但欢迎批评指正。菜鸟的话就一起交流提高吧。

ES6系列主要包括:

  1. let/const
  2. 解构赋值
  3. 模板字符串
  4. 函数扩展
  5. symbol
  6. set/map
  7. promise
  8. async
  9. class
  10. module

欢迎持续关注。

今天主要说let/const,其实只说let/const很简单,无非就是定义变量和常量。但是除此之外,我们还需要了解ES6作用域的变化以及变量存储的相关知识。

我们都知道,ES5有var用来定义变量,但定义的是全局变量(顶层),ES6新增let用来声明块级作用域内有效的变量,const用来声明常量。

let与var相同点

  • 都用于声明变量
  • 语法规则相似

let与var不同点

  • let声明的变量只在所在代码块(块级作用域)有效
  • var声明的变量在全局范围有效
  • var存在变量提升
  • let不存在变量提升

块级作用域是什么?变量提升又是什么?不要慌,下面一个一个说,先说变量提升。敲黑板,划重点了,要考的!!!变量提升在面试中很容易被问到。

变量提升:函数及变量的声明都将被提升到函数的最顶部。

简单来说,变量提升就是允许变量或函数先使用后声明,不会报错。

在ES5中,作用域只有全局作用域和函数作用域两种;ES6新增了块级作用域

全局作用域:声明的变量为全局变量,所有函数可访问
函数作用域:声明的变量为局部变量,只有在函数内可访问

块级作用域:通过花括号({})声明,定义局部变量,外层作用域不能访问内层作用域的变量

关于let和var就是以上内容。下面是const:

const用于声明只读常量。只读的意思就是一旦声明,它的值就不能再次改变。

它有以下几点需要特别注意:

  • const必须在声明时就初始化值
  • 只在声明所在的块级作用域有效(与let相同)
  • 不存在变量提升(与let相同)
  • 不可重复声明
  • 尽量避免用const声明对象

重点解释最后一条,避免用const声明对象。因为对象是引用类型的值,而const作为常量能保证的只是变量指向的内存地址所保存的值不能改变。

JS变量存储

const只能保证栈存储中的内容不变,而对于对象和数组来说,实际的值存储在堆内存,栈中存储的只是指向堆的一个地址而已。这也就是为什么将一个对象用等号赋值给另一个对象时,两个对象的值会相互影响,新对象存的只是指向原对象的一个地址罢了。

今天的内容,你看懂了吗? 单选

0人
0%

看懂了,完全没毛病!

0人
0%

啥?你在说啥?我听不见!

投票

相关推荐