ES6篇.day01-let,const,参数默认值,箭头函数,解构赋值,扩展运算符
创始人
2024-05-07 13:25:36
0

目录

  1. 变量声明(var,let,const)

  1. 参数默认值

  1. 箭头函数

  1. 解构赋值

  1. 扩展运算符(...)

    • 变量声明

var关键字
以前使用 var关键字声明变量
-> 有作用域的提升
-> 没有块作用域的概念
-> 使用var可以重复的声明变量
-> 使用var声明变量时,可省去关键字
ES6新增命令(let,const)
let关键字: 声明变量, 先声明,再使用(否则报错), 有块级作用域, 不允许重复声明变量
const关键字: 声明一个只读的常量(声明后值不可修改), 必须初始化,有块级作用域

暂时性死区: 在代码块内,使用let命令声明变量之前,该变量都是不可用的
注意:
-> 区块中使用let/const,区块形成封闭作用域, 先声明再使用,否则报错
-> ES6允许块级作用域的任意嵌套
-> 外层作用域无法读取内层作用域变量
-> 内层作用域可以定义外层作用域的同名变量
-> 块级作用域的出现,实际上使得广泛应用的立即执行函数表达式(IIFE)不再必要了(可以不在使用闭包,立即执行函数)
      {var a = 10var a = 100}console.log(a)  //100{let num = 20num = 200console.log(num)}// console.log(num)// 遍历数组let arr = [1, 2, 3]for (var i = 0; i < arr.length; i++) {setTimeout(function () {console.log(i)  //由于var声明的变量没有块作用域,故会打印3个3, 可使用闭包解决},1000)}// 闭包解决for (var i = 0; i < arr.length; i++) {(function (a) {setTimeout(function () {console.log(a)},1000)})(i) //闭包}// let声明for (let i = 0; i < arr.length; i++) {setTimeout(function () {console.log(i)  // 0 1 2},1000)}var tmp1 = 1function fun(){// var tmp;  局部变量提升,覆盖外层全局变量var tmp2 = 2console.log(tmp1);  //undefined if(true){var tmp1 = 'hello'// tmp = 'hello'}}fun()// console.log(tmp2);  //无法访问内部作用域的变量// const关键字: 声明一个只读的常量(声明后值不可修改),必须初始化const p = 3// p = 1      修改会报错 Assignment to constant variable.赋值给常数变量console.log(p);// ES5中定义常量Object.defineProperty(window,'PI',{value: 3.14})console.log(PI);
    • 参数默认值

    // ES5设置默认值 if或者||function sum1(a,b,c){c = c || 10return a + b + c}console.log(sum1(1,2)); // 13// ES6中设置默认值  设置默认值的形参需写在最后 s数组,对象均可function sum2(a, b = 11, c = []){return a + b + c}console.log(sum2(1,2));  // 3
    • 箭头函数

  • ()=>{ }

  • 箭头函数中的this, 指向函数定义时this的指向(通常函数定义时指向的是window)

  • 箭头函数没有arguments

      // 箭头函数 可理解为函数表达式的缩写// 函数表达式:  变量 = 匿名函数let fun1 = function () {console.log('111')}// 箭头函数  也可设置默认值let getMax = (a, b) => {return Math.max(a, b)}console.log(getMax(12, 13)) // 13// 当只有一个参数时, 可省略箭头函数的()// 当只有一条语句时, 可省略箭头函数的{}, return可不写, 结果自动返回// let getAbs = (a)=>{//   return Math.abs(a)// }let getAbs = (a) => Math.abs(a)// 箭头函数和普通函数中this指向问题区别let a = 1000 //无变量提升, 不会挂着window对象上var obj = {a: 100,getA1: function () {// 普通函数中的this,指向函数调用者console.log(this) //{a: 100, getA1: ƒ, getA2: ƒ}return this.a},getA2: () => {// 箭头函数中的this, 指向函数定义时this的指向(通常函数定义时指向的是window)console.log(this) // Window{ }return this.a},getA3: function (n1, n2) {console.log('3--arguments-->', arguments)return this.a},getA4: (n1, n2) => {console.log('4--arguments-->', arguments)},}console.log(obj.getA1()) // 100console.log(obj.getA2()) // undefined// console.log(obj.getA2());  // 1000   若var a = 1000// 箭头函数没有argumentsconsole.log(obj.getA3(1, 2)) //3--arguments--> Arguments(2)console.log(obj.getA4(3, 4)) //arguments is not defined
    • 解构赋值

      // 针对数组和对象进行解构赋值// 数组的解构var arr = ['香蕉', '西瓜', '梨', '苹果']// ES5中// const apple = arr[3]// const pear = arr[2]// const banana = arr[0]// ES6中使用解构改写 不赋值的元素,,const [banana, , pear, apple] = arrconsole.log(apple, pear, banana) //苹果 梨 香蕉// 把数组中的第一个元素放在变量ba2中,其余放在一个新数组fruits中const [ba2, ...fruits] = arrconsole.log(ba2, fruits) //香蕉 (3) ['西瓜', '梨', '苹果']// 对象中的解构赋值const obj = { a: 10, b: 20, c: 30 }// ES5中获取console.log(obj.a);  // 10console.log(obj['b']); // 20// 使用ES6解构赋值改写const { a, b } = objconsole.log(a,b); //10 20const { a: num1} = objconsole.log(num1);  //10const { z: num2} = objconsole.log(num2);  //undefinedconst { x = 50 } = objconsole.log(x);   //50console.log(obj);  //{a: 10, b: 20, c: 30}
    • 扩展运算符...

// 扩展运算符 ...// 1. 拷贝数组// ES5中复制数组元素 (拷贝)const arr2 = []// 方式1: 遍历for(let i = 0; i < arr.length; i++){arr2.push(arr[i])}// 方式2: assign()Object.assign(arr2,arr)console.log(arr2);const n1 = [1,2,[3,[4,5]]]const n2 = []// 浅拷贝           深拷贝是全展开[1,2,3,4,5]Object.assign(n2,n1)console.log(n2); //[1, 2, Array(2)]// ES6使用扩展运算符改写拷贝数组    浅拷贝const n3 = [...n1]console.log(n3);  //[1, 2, Array(2)]// 2. 拼接数组const a1 = [1,2]const a2 = [1,2]const a3 = [1,2]// 数组的方式 concatconst bigArr1 = a1.concat(a2,a3)console.log(bigArr1);  // [1, 2, 1, 2, 1, 2]const bigArr2 = [...a1,...a2,...a3]console.log(bigArr2);  // [1, 2, 1, 2, 1, 2]// 3. 解构和赋值连用// 把数组中的第一个元素放在变量b3中, 将剩余元素存入一个新数组fruitsvar arr11 = ['香蕉', '西瓜', '梨', '苹果']const [b3, ...fs] = arr11console.log(b3,fs);  //香蕉 (3) ['西瓜', '梨', '苹果']// 4. 作为函数的参数const f1 = (...params) =>{console.log(params);// 进行求和let sum = 0params.forEach(item => sum += item)return sum}const sum1 = f1(10,12,13)console.log(sum1);  //35// 对象中扩展运算符的使用const obj11 = {a:10,b:20}// 对象的拷贝const obj22 = {...obj}console.log(obj22); //{a: 10, b: 20, c: 30}const obj33 = { c: 10, a:30, d: 222,...obj11,}console.log(obj33);  // {c: 10, a: 10, d: 222, b: 20}

PreviousNotes:

https://blog.csdn.net/qq_54379580/article/details/126464151?spm=1001.2014.3001.5501

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...