// ES6语法
// 是对js影响最大的一个版本更新
// 在 ES6 语法中 退出了很多新的 语法结构
// 就相当于 js 语言, 换了一个新的发动机
// 比如 java 等是 顶级跑车 帕加尼 福特地狱猫
// 之前的 JavaScript 最多算是 宝马Z4
// ES6 之后 可以算是 玛莎拉蒂 阿斯顿·马丁 这个级别了
// 之前的 js 弱类型的解释型语言
// 现在有了ES6 可以算是 半强类型
// TS 是 微软 开发的 功能最强大的 js 升级语法
// TS 可以勉强算是强类型语言
// 变量的定义
// 箭头函数
// class 构造函数
// 模板字符串
// 立即执行函数
// 解构语法
// 展开运算符
// 合并运算符
// 新增的一些数组对象的操作方法
// MAP SET 数据类型
// 变量新的定义语法
// 定义变量,两个新的关键词 let const
// let : 1,变量名称不能重复
// 之前 var 语法 var int = 100; var int = 200;
// 等于是在 对 int 变量做重复赋值
// 如果使用let 定义变量,这样的语法会报错
//
// 2,预解释只会解释 var 和 function 两个关键词声明的变量
// 不会预解释 let const 声明的变量
// 提前调用 var 声明的变量,执行结果是undefined
// 提前调用 let 声明的变量,执行结果是报错
//
// 3,变量的作用域 : 使用 let 定义的变量,如果是在 { } 中定义的
// 那么只能在 { } 中调用这个变量,不能在 { } 外,调用这个变量
// if判断 switch for while for...in forEach 函数
// for循环,for...in循环等循环中,以let 声明定义的循环变量,也不能在循环换外被调用
// 如果一定要在 { } 等中 给 let 声明的变量赋值
// 一定要先定义变量,在 { } 中给变量赋值,这样就可以在 { } 外调用
//
// 4,通过 let 声明的循环变量
// 在询函中每次都会生成一个独立的,相互之间不影响的,存储独立数值的循环变量
// var 声明的循环变量,最终所有的i都是一个数值
// let 声明的循环变量,最终都是独立的不同的数值
// const 1,变量名称不能重复
// 2,不会JavaScript程序 预解释/预解析
// 3,变量的作用域 : 使用 const 定义的变量,如果是在 { } 中定义的,只能在 { } 中使用
// 4,const 声明的变量,不允许,修改存储的数值
// 声明的一般称为 常量 ,也就是 存储数据数值不能修改的变量
// 在 JavaScript 中 const 一般用于存储应用数据类型
// 用 const 声明的变量 存储的是 应用数据类型的内存地址
// 只要不改变内存地址,可以修改引用数据类型中存储的数据数值
// 使用 let 关键词定义变量,变量名称不能重复
// let int = 100;
// let int = 200;
// JavaScript只预解释,var 和 function 定义的变量和函数
// let 声明的变量,不会预解释,提前调用,结果是 报错
// console.log(a);
// let a = 100;
// let声明的变量,作用域只在{}中,包括循环语句定义的循环变量
// if(true){
// let b = 100;
// }else{
// let b = 200;
// }
// // b 只能在 {} 中调用
// // 在 {} 外调用 执行结果是 报错
// console.log(b);
// 必须要在{}中做赋值操作,必须要在{}外,做变量的定义
// 在 {} 外定义 变量c,在{}中给变量c赋值,可以在{}外正常调用变量c
// let c;
// if(false){
// c = 100;
// }else{
// c = 200;
// }
// const 不允许修改存储的数值
// const d = 100;
// 不允许,修改 const 声明的变量中存储的数值数据
// d = 200;
// 对象,函数,数组,变量名称中,存储的是 引用数据类型的内存地址
// obj中存储的是对象的内存地址
const obj = {name:'张三'};
// 我们这里修改的不是内存地址,是内存地址,对应内存空间中存储的数据数值
obj.name = '李四';
console.log(obj);