1、作用域
let -- 块级作用域变量,它们不能在被声明之前读或者写
但是var声明可以在包含它的函数,模块,命名空间或全局作用域内部任何位置被访问
2、重定义
var对于重定义的变量,不会报错,但是 多个重复的 声明实际上都引用一个相同的X
但是let声明就会直接报错
3、const 声明
const是声明变量的另一种形式 , 与let 声明相似,但是就像它的名字所表达的,它们所赋值后不能改变。换句话说,它们拥有与let相同的作用域规则,但是不能对它们重新赋值
4、解析
注意: 解析对象时,变量必须与对象中的key 名和个数都保持一致,否则会报错 , 但可以在变量名前加... , 使该变量可以接收多个参数
但只能给最后一个变量前加... ,用于接收剩下多余的对象
属性重命名 --注意重命名后,变量名则改变,以前的变量名将不存在
但对象中的key值对应的仍是以前的变量名
默认值 -- 当传递的参数y的值是undefined时,就使用其默认值1001
解析也可以用于函数声明
5、展开
展开操作符与解构相反。它允许你将一个数组展开为另一个数组,或将一个对象展开为另一个对象
展开对象还有其他一些意向不到的限制,首先,它仅包含对象自身的可枚举属性, 即:如果展开一个对象实例时,会丢失其方法
可以看见,clone中只包含对象的属性p,不含方法m , 所以: