把之前看的阮一峰老师的ECMAScript6入门笔记翻出来整理一下(关于let和const)

Let和const
Let:用来声明变量,他的用法和var类似,但是所声明的变量只在let命令所在的代码块内有效不存在变量提升,且不允许重复声明。可以理解为局部变量。
Let实际上为JavaScript新增了块级作用域,好处是大大的!
这样可以避免内层变量可能会覆盖外层变量的尴尬,也可以避免用来计数的循环变量泄露成为全局变量来占用内存。
(function(){
function a(){
let b=5;
if(true){
let b=10;
}
console.log(b)
}
a()//5,这表示代码块不受内层代码块的影响,如果两次都用var定义b,结果就是10
}())

for(var i =0;i < 5; i++){
var i = ‘abc’;
console.log(i)//输出一次abc
}
for(let i =0;i < 5; i++){
let i = ‘abc’;
console.log(i)//输出五次abc
}

有一个需要注意的地方:ES6的块级作用域允许声明函数的规则,只在使用大括号的情况下才成立!
// 不报错’use strict’;if (true) {
function f() {}}
// 报错’use strict’;if (true)
function f() {}

Const:声明一个只读的常量,一旦声明,常量的值就不能改变。这也意味着声明的时候必须赋值!和let一样,只在声明所在的块级作用域内有效。

在ES5中,顶层对象和全局变量时等价的。这被认为是JavaScript最大的设计败笔之一。
ES6为了改变。一方面兼容,var,function保持不变,另一方面规定let,const,class声明的全局变量,不属于顶层对象的属性
var a = 1;
console.log(window.a);//undefined

let b = 2;
console.log(window.b); //undefined
测试结果好像和书上的说法有点不一样。不知道是不是出台了新的规定

猜你喜欢

转载自blog.csdn.net/weixin_44457144/article/details/87889522