1.let
console.log(i);
for(var i=0;i<10;i++){
console.log(i);
var a=i;
}
console.log(i);//10
console.log(a);//9
i和a都能取得到,说明js中用var在for中声明的变量可以在外部访问。
for(let i=0;i<10;i++){
let a=i;
}
console.log(i);
console.log(a);
在js/es6中用let在for中声明的变量,无法在外部访问。
var a=0;
let a=1;
console.log(a);
let声明的变量,变量名不能重复!而且必须先声明后使用,换句话来说let没有变量的提升和变量的污染。
块级作用域相当于局部作用域,在js中只有函数才能创造一个局部作用域,但是在es中只要是个大括号都是都是局部作用域(也是块级作用域)
{
var a=0;
let b=1;
}
console.log(a);//0
console.log(b);//报错,找不到变量b
let a=0;
{
console.log(a);
//不能先声明后声明
let a=1;
console.log(a);//1
}
console.log(a);//0
在js中全局变量可以在局部环境下使用,局部不能在全局下使用,在es6中全局只能在全局使用,局部也只能在局部使用,而且全局声明的变量跟局部局部声明的变量没有任何关系,变量名都可以一样,let声明的变量只能在当前作用域使用.
2.const
- const关键字在es6中用来声明静态常量
- 常量所有字母必须全部大写(规范)
const PI=3.1415926;
console.log(PI);
PI=0;
console.log(PI);//报错,常量无法修改
const ABC;
console.log(ABC);//常量在声明中必须赋值
var a=0;
let aaa=1;
//var声明的变量是写在了window对象上,是window的属性或方法。
//let声明的变量跟window完全没有关系
console.log(window);
let ppp=123;
function fn1(p){
let a=p;
console.log(a);
}
fn1(ppp);
let [a,b,c]=[1,2,3];
console.log(a);
console.log(b);
console.log(c);
let arr1=0;
let arr=[1,2,3,4,5,6,7,8];
console.log(...arr);
arr1=arr;
console.log(arr1);
arr1.push(0);
let arr1=[...arr];