一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第7天,点击查看活动详情。
var
什么是var?
js中声明变量时使用的。
var的缺点
- 会被声明提前,打乱程序正常的执行顺序;
- 没有块级作用域 ,代码内的变量会超出代码块范围,影响外部变量;
什么是块级作用域?
js中没有,其他语言没有这个叫法,指除了对象{}和function的{}之外,其余if else、for等分支和循环结构的{}范围,在其他语言中称为跨级作用域,其他语言中,程序块{}内的变量,出了所在的程序块{},就不能使用。
let
什么是let?
js中es6中的新语法,也是用来声明变量的。
let的优点
let能解决var自身声明提前,没有块级作用域的问题。
- 不会被声明提前,保证程序按照顺序执行;
- 让程序块,变成“块级作用域”,保证块内的变量,不会影响块外的变量;
let的缺点
- 因为变量不能声明提前,所以不能在声明变量前,提前使用该变量;
- 在相同作用域内,禁止声明两个同名的变量;
- 因为let底层相当于匿名函数自调,所以,即使在全局创建let变量,在window中也找不到 ;
在旧js中左右全局变量都保存在widnow;
var a=10;
console.log(a);//10
console.log(window.a);//10
const
什么是const?
js中es6中的新语法,也是用来声明常量的。
const的优点
- 不会被声明提前,保证程序按照顺序执行;
- 初始值不会被篡改;
- 让程序块,变成“块级作用域”,保证块内的变量,不会影响块外的变量;
const的缺点
- 不能声明提前,所以不能在声明变量前,提前使用该常量;
- 必须设置初始值;
- 不保存在window中;
- 在相同作用域内,禁止重复赋值;
- 在相同作用域内,禁止声明两个同名的常量;