今天有时间又看了一下es6的语法,稍微做了一点总结,便于日后查阅:
let / const 声明变量,一下所讲的所有的特点都是相较于var来说的
var:
1:变量提升: var/function 声明的变量会被提升到它的调用之前
console.log(aa); //undefined
var aa;
==等价于==
var aa;
console.log(aa); //undefined
aa = 12;
console.log(aa); //12
2: 全局作用域 / 函数作用域
函数内部可以访问全局作用域的变量,大那是全局作用域只可以访问全局变量,
let 特点:
1 . 不存在变量的提升
console.log(bb); //报错
let bb;
2 . 暂时性死区
在一个块级作用域内声明的变量就会绑定在这个区域内了,在let没有声明变量之前这个变量都是不可用的
1) : console.log(aa); // 报错
let aa;
2) : function fn(aa){
let aa;
}
fn();// 报错,aa已经声明过了,这也说明了函数的参数实是在这个函数内部声明一个变量
3) : function bar(x = y, y = 2) {
return [x, y];
}
bar(); // 报错 在赋值x = y 的时候,y 还没有被声明.
//function bar(x = 2, y = x) {
// return [x, y];
//} 这样是可行的
3 . 不允许重复声明;在同一个块作用域( "{ }" )内不可以重复声明同一个变量
1) : let aa = 1;
let aa;
console.log(aa); //报错, aa已经声明
2) : function fn(bb){
let bb;
}
fn();//报错 ,bb 已经声明
4 . 块级作用域
会计作用域内部可以访问包含它的组用域内的变量,但是却不能访问包含于它的块级作用域的变量
let tmp = "hello";
//console.log(aa); //找不到aa
//console.log(bb); //找不到bb
function f() {
console.log(tmp); //hello
//console.log(bb); //找不到bb
let aa = 123;
if (true) {
let bb = 567;
console.log(tmp); //hello
console.log(aa); //123
}
}
f();
const 特点:
基本以let是一致的,只有一点const声明的变量是只读的,一但声明就必须初始化(赋值),边切后面也不可以在重新赋值
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。