聊聊ECMAScript中的var、let和const常见问题及区别详解
聊聊ECMAScript中的var、let和const常见问题及区别详解。
在ECMAScript中,有3个关键字可以用于声明变量。分别是:var、let和const。其中,var在所有ECMAScript都是可以使用的,但是let和const需要在ECMAScript6及其以上版本才可以使用。
let和const的行为基本一致,但是其中有一个比较重要的一个区别,就是const用它声明变量时必须同时初始化变量,且尝试修改const声明的变量会导致运行错误。所以常有人直接理解为const用于声明常量。
一:作用域
var是函数作用域。
let和const是块级作用域。
也就是说var声明的变量出函数时就会被销毁,而let和const声明的变量出块级内部就会被销毁。
下面使用for举例:
for中的变量声明,也是var和let的区别之一。
for (var i = 0; i < 5; i++) {
setTimeout(() => {
console.log(i);
}, 0);
} //5 5 5 5 5
for (var i = 0; i < 5; i++) {
setTimeout(() => {
console.log(i);
}, 0);
} //0 1 2 3 4
造成这种现象的原因就是:var可以渗透到循环体外部,在退出循环的时候,迭代变量保存的是导致循环退出的值。而let的是因为作用域反限于for循环块的内部,迭代循环声明一个新的变量,每个setTimeout引用的都是不同的变量实例。
二:优先级
三个关键字之间没有优先级,按照声明顺序。
三:全局声明区别
let和var的不同是,let不会成为window对象的属性。
var name = "Matt".
console.log(window.name); //Matt
let name = "Matt"
console.log(window.name);//undefined
其他:
1.在ES6中明确规定,在{}中出现let和const,就会被限制在里面(也就是块级作用域)。
2.函数提升优先级大于var的变量提升(还是不要重名比较好,你想想要是你们部门有人和你重名重姓会多麻烦)。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。