if(true){
var foo =1;}if(true){
let foo =1;}
console.log(foo);// 可以通过新的关键字 let 定义块内部的变量// let 定义的变量在块级作用域内部能够被访问
// 非常适合设置 在 for 循环中的循环变量for(var i =0; i <3; i++){
for(var i =0; i <3;i++){
console.log(i);}}// 通过 let 定义变量,只在自己的循环中生效for(let i =0; i <3; i++){
for(let i =0; i <3;i++){
console.log(i);}}
// 通过循环批量添加事件// 通过 let 定义变量,只能在块级内部被调用var eles =[{
},{
},{
}];for(let i =0; i < eles.length ; i++){
eles[i].onclick=function(){
console.log(i);}}
eles[0].onclick();
// 循环 实际上有两层作用域for(let i =0; i <10; i++){
let i ="foo";
console.log(i);}let i =0;if(i <10){
let i ="foo";
console.log(i);}
i++;
// 和 var 有另外一个区别,let 不会进行变量声明提升
console.log(a);// var a = 1;let a =2;
const
特点:
在 let 的基础上增加了一个【只读】效果
声明的时候必须同时赋初值
const name ="zs";
name ="ls";// 声明的时候必须同时赋初值const name ;
name ="zs";const obj ={
};
obj.name ="zs";
obj ={
};
最佳实践:不用 var,主用 const,配合 let
数组的解构
// 数组解构const arr =[100,200,300]const foo = arr[0]const bar = arr[1]const baz = arr[2]
console.log(foo, bar, baz)const arr =[100,200,300]const[foo, bar, baz]= arr
console.log(foo, bar, baz)const arr =[100,200,300]const[,, baz]= arr
console.log( baz)const arr =[100,200,300]const[foo,...rest]= arr
console.log(rest)const arr =[100,200,300]const[foo]= arr
console.log(foo)const arr =[100,200,300]const[foo, bar, baz =400, more =123]= arr
console.log(more)
console.log(baz)const path ="foo/bar/baz"// const temp = path.split("/")// const a = temp[1]const[,,a]= path.split("/")
对象的解构
// 对象解构const obj ={
name:'zs', age:18}const{
name }= obj
console.log(name)
// 箭头函数// function plus(a) {
// return a + 1// }// console.log(plus(10))constplus=(a, b)=>{
console.log('plus invoked')return a + b
}
console.log(plus(1,2))const arr =[1,2,3,4,5,6,7]// const arr1 = arr.filter(function (item) {
// return item % 2// })const arr1 = arr.filter(i => i %2)
console.log(arr1)
箭头函数的this
// 箭头函数与 thisconst person ={
name:"tom",// sayHi: function () {
// console.log(`hi,my name is ${this.name}`)// }// sayHi: () => {
// console.log(`hi,my name is ${this.name}`)// }
sayHi:function(){
// const _this = this;setTimeout(()=>{
console.log(`hi,my name is ${
this.name}`)},1000);}}
person.sayHi()
对象字面量的增强
// 对象字面量增强const bar ="bar"const age ="age"const obj ={
name:"tom",// bar: bar
bar,sayHi(){
console.log('hi')
console.log(this)},// 计算属性名[1+2]:18}// obj[age] = 18
console.log(obj)// obj.sayHi()
const s =newSet(["foo","bar","baz"])for(const item of s){
console.log(item)// foo bar baz}const m =newMap()
m.set("foo",1)
m.set("bar",2)for(const item of m){
console.log(item)// ['foo', 1] ['bar', 2]}for(const[key,value]of m){
console.log(key,value)// foo 1 bar 2}
遍历普通对象的问题
const obj ={
name:"zs",
age:18}for(const item of obj){
console.log(item)// 报错}