1.let和const
(1)let:变量
console.log(a);
var a =1;
let a = 10;
console.log(a);
console.log(i);
for(var i = 0;i<10;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);
//let在js/es6中用let在for中声明的变量,无法在外部访问
}
var a =0;
let a =1;
console.log(a);
//let声明的变量,变量名不能重复,而且必须先声明后使用
//换句话来说,let没有变量的提升和变量污染
//块级作用域相当于局部作用域
//在js中只有函数才能创造一个局部作用域,但是在es中只要是个{},他都是局部作用域(块级作用域);函数不管在es中还是js中都是块级作用域
{
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:静态常量
(1)const关键字在es6中用来声明用来声明静态常量
(2)常量所有字母必须大写
const PI=3.1415926
console.log(PI);
PI=0;
console.log(PI);//报错 常量无法修改
const ABC;
console.log(ABC);//报错,常量在声明时,必须赋值
//const在作用域特性上跟let完全一样
//var声明的变量,是写在了window对象上,是window的属性或方法
//let声明的变量跟window完全没有关系
var aa = 0;
let aaa=1;
console.log(window);
//传参形式
let ppp=123;
function fn1(p){
let a = p;
console.log(a);
}
fn(ppp);
//解构赋值
let [a,b,c]=[1,2,3];
console.log(a,b,c);
let [c,b,a]=[1,2,3];
console.log(a,b,c);
let arr = [1,2,3,4,5];
console.log(...arr);
var arr=[1,2,3,4,5];
arr1=arr;
let arr =[1,2,3,4,5];
arr1=arr;
console.log(arr);
console.log(arr1);
let arr = [1, 2, 3, 4, 5];
let arr1 = [];
arr1 = [...arr];
arr1.push(0)
console.log(arr);
console.log(arr1);