同样都是声明方式,要这么多能吃吗?
那么为什么ES6还新增了const 、let两种声明方式呢…
- 可以重复声明;
- 无法限制修改,(有的常量是不需要改变的,但是var不能满足);
- 没有快级作用域;
**变量可以被重复声明是其他语言所不接受的,(虽然我也没用过几种语言,但是相信我,这是真的…)
**无法限制修改,简直非人类嘛!!!人家代码中还不能有个固定不变、唯一存在的数学常量吗
**没有块级作用域,这就让人寝食难安了,我在我自己的函数里边声明的变量,你再外面都拿得到,谁还睡得着
以上种种…新的声明方式诞生了
1.所谓let
特点1:不能重复声明
使用var:
var a= 1;
var a = 2;
console.log(a) //2
使用var,变量重新声明,覆盖原有
使用let:
let a= 1;
let a = 2;
console.log(a) //text.html:51 Uncaught SyntaxError: Identifier 'a' has already been declared
**浏览器会很亲切的提示你:语法错误:a已经被声明过啦
特点2:块级作用域
使用var:
{
var a = 1;
}
console.log(a) //1
上边也说了,var不规矩,声明了就是全局的,想拿就拿
使用let:
{
let= 1;
}
console.log(a) //Uncaught ReferenceError: a is not defined
包裹在语法块中的变量在外部都是无法访问到的,例如函数中的,{}中的
特点3:变量可以重新赋值
这里就不举例了,字面意思,定义了的变量可以被重新赋值,这一点跟var没有什么区别。但是跟const 还是有区别
2.所谓const
特点:不能重复声明、 块级作用域
与let唯一不同的就是:cosnt一旦定义就不能重新赋值了
例如:
const a = 1;
a = 2;
console.log(a) //text.html:51 Uncaught TypeError: Assignment to constant variable.
浏览器会提示你:语法错误,不能赋值给变量
如上所示,可见js正在步入正统,未来越来越好…越来越强大,啧啧啧!!!