变量声明的方式:
let / const
共同点
块级作用域
在同一个作用域下,变量名不允许重复
他们声明的全局变量并没有挂在 window对象上
都没有预编译
不同点
let 声明的变量值可以改变
const 声明的变量值不能改变
必须声明后立即赋值 const a = 3.14;
存引用数据类型时,内容可以发生改变(地址不能改变)
优先考虑使用const , 如果变量会发生改变,就使用let , 最后使用var
模板字符串:`${}`
... 展开运算符
展开数组或者对象 --- 实现深复制
展开实参列表 -- 取代arguments
解构 --- 把对象或者数组的值取出来
数组的解构
有序的 --- 按照顺序解构即可
交换变量的值
对象的解构
无序的 --- 按照属性进行解构
箭头函数:
语法 --- 匿名函数
简写
省略小括号 -- 只有一个参数的时候
省略大括号和return -- 函数体只有一句代码且有返回值的时候
this指向问题
this一般是在函数里面出现的
事件处理函数 事件源
对象的方法中 对象本身
其他指向window
箭头函数 --- 没有自己的指向 跟随父元素
拓展:
具名函数也有预编译
赋值式函数没有预编译
只有匿名函数可以改写成箭头函数
关于简写
形参有且只有一个的时候,省略小括号
当函数体只有一句代码且有返回值的时候 , 省略大括号和return
注意区别:
箭头函数中没有arguments
使用展开运算符接受实参 ...arr 得到的是一个真数组
箭头函数没有自己的this指向,父元素指向谁,箭头函数的this就指向谁
// 当形参有且只有一个的时候,括号可以省略
const fn = n => {
console.log(n);
}
fn(5)
// 有两个参数,不能简写
const fn2 = (n , m) => {
console.log(n + m);
}
fn(5 , 3)
// const fn3 = n => {
// return ++n ;
// }
// 当函数只有一句代码,且有返回值的时候,可以省略大括号和return
const fn3 = n => ++n ;
闭包:
function fn() {
const a = 1 ;
const b = 2 ;
// 向返回多个值的时候,可以返回一个数组
return [a , b]
}
// console.log(fn());
const [a,b] = fn() ;
console.log(a , b);
function fn2() {
const c = 3 ;
return function () {
console.log(c);
}
}
// 闭包:一个函数可以访问另一个函数的变量
// 缺点:内存泄漏导致变量无法被释放
const res = fn2() ;
res() ;
// fn2()()