1. let与const
var声明的变量会挂载在window上,而let和const声明的变量不会
1.为了解决JS变量提升的隐患,将JS变量限定在某一个指定的作用域范围内,引入let定义变量
2.对"先使用后声明"的let变量,JS将会解析编译不通过,将会抛出Uncaught ReferenceError,也不会执行对应的上下文
3.在函数内部的let变量仍然遵循"先声明后使用"原则,如果当前函数体中未声明,则往函数外向上查找(找到则使用,未找到则报错)
image.png
(小彩蛋:请注意同样都是未声明先使用 let var提示不同哦)
4.在函数参数中仍然遵循"先声明后使用"原则, 参数也是依次"从左至右,从上至下"原则声明和赋值
image.png
image.png
2. var let const 异同点
相同点:
三者都遵循“先声明后使用”原则, 函数内部优先查找内部是否声明,未声明可访问外部变量
不同点:
1.var/let变量可单独声明,之后再某个时刻再赋值(且可多次赋 值);const常量必须声明同时并赋值,且之后不可再次赋值(无法改变)
2.使用var定义的变量(或函数)没有块作用域概念,使用let/const定义的变量(或函数)是存在块作用域的
3.使用var定义的变量(或函数)可重复声明,在同一作用域内使用let/const定义的变量(或函数)是不能重复声明的
推荐点:
优先使用const来定义,如果变量值确实可能会发生变化,则考虑使用let(如for循环迭代值), 尽量不使用var来定义变量
注意点:
⚠️const如果是基本类型,const变量不能改变其内存地址
⚠️对于引用类型而言,内部成员仍然可改变
image.png
如果不希望引用类型的内部成员被外界篡改,可使用"对象冻结"(Object Freeze)技术
image.png
网友评论