javascript 高级笔记

本文详细介绍了JavaScript ES6中的变量作用域,包括局部作用域、全局作用域和块作用域。重点解析了作用域链、垃圾回收机制以及闭包的概念,解释了闭包如何延长变量生命周期并实现私有变量。同时,讨论了函数的提升、动态参数arguments、剩余参数、展开运算符和箭头函数的用法。此外,还涉及了解构赋值的实践,包括数组和对象解构,并举例说明了在实际开发中的应用场景。
摘要由CSDN通过智能技术生成
  1. 作用域
    es6就是往上都是es6 规定了变量生效的范围 var 只有函数作用域

1.1 局部作用域 & 全局作用域
局部作用域 : 函数作用域 函数的形参是局部作用域 最外层声明的变量 script 标签内部 、 js 文件

块作用域 : 使用 {} 包裹的 let 和 connst 声明的是块作用域 var 不能声明块作用域

1.2 作用域链
作用域链的本质是底层的变量查找机制

1.3 垃圾回收机制 & 闭包
内存不使用了 就会被垃圾回收器自动回收

垃圾回收的主要是内存 GC garbage collection

变量的生命周期 : 分配内存 - 使用 - 回收

引用计数法 缺点:嵌套引用 互相指向对方 , 一直不会被销毁

标记清除法 找不到就清除

闭包

概念:一个函数对周围状态的引用捆绑在一起,内层函数中访问到其外层函数的作用域 外部可以访问函数内部的变量,可以实现变量的私有

function count() {
let i = 0
return function () {
i++
console.log(函数被调用了${i}次)
}
}
const fun = count() // 实际fun 就是返回的 匿名函数 实际上之调用了1 次count 函数 所以 i 可以一直累加
count()() //函数被调用了1次
count()() //函数被调用了1次
count()() //函数被调用了1次
// 注意: count()() 每次调用count 每次的 i 都是在不同作用域生效
闭包的作用:让外部操作函数内部的变量 , 延长了变量的生命周期;
使用闭包时 常常把内层的函数当作return 值;eg:柯里化函数

闭包容易形成内存泄漏
柯里化函数的使用

柯里化函数
1.4 变量提升
var

注意:只提升声明 , 不提升赋值

  1. 函数进阶
    2.1 函数提升
    推荐先声明 后调用

  2. 把所有的函数声明提升到当前作用域的最前面

  3. 只会提升函数声明 , 不会提升函数调用

注意:函数表达式 必须先声明 后调用

2.2 动态参数 arguments
伪数组arguments 不能使用数组的push 等方法

arguments伪数组 依次接收传入的实参

View Code
2.3 剩余参数
推荐使用

只能存在函数里面

(a,b,…arr) arr 是真数组 , 数组的方法和属性都可以使用 (a,b,…arr) 表示 a 接收第一个实参 , b 接收第二个实参 , arr 接收剩余所有的实参

注:箭头函数没有arguments

View Code
2.4 展开运算符
就是展开数组的每一项

使用场景: a)求数组的最值 b) 合并数组 c) 把伪数组转换为真数组 ps :Array.from 方法也是转换真数组的
转换真数组

展开运算符和剩余参数主要区别就是写的位置不同

<script>
  const arr = [1, 2, 3, 42, 23]
  console.log(...arr) // 不会修改源数组
  //   使用场景: a)求数组的最值 b) 合并数组
  //   console.log(Math.max(1, 2, 4, 6))  //()数字类型
  console.log(Math.max(...arr))
  console.log(Math.min(...arr))
  //   合并数组
  const arr2 = [89, 34, 23]
  const newArr = [...arr, ...arr2]
  console.log(...arr)
  console.log(...arr2)
  console.log(...newArr)
</script>

2.5 箭头函数
箭头函数是函数表达式 ,需要先声明后使用;

const fn = (形参列表) => {函数体}

箭头函数没有arguments动态参数

箭头函数没有自己的 this 箭头函数不会自己创建this ,他会从自己的作用域链的上一层沿用this指向 , 既可以在上一层打印thsi 确定 ,上一层就是上一个{}

严格模式下 this 时undefined

箭头函数使用在本来需要匿名函数的地方

箭头函数的简写

View Code
3. 解构赋值 重要 就是简洁的语法格式
后面天天用 offen use

必须加分号的场合:

a)自执行函数

b)数组[] 开头

数组有序赋值 根据顺序赋值

对象无序赋值 根据变量名赋值

3.1 数组解构
就是一种简洁的语法 解构的作用:简单来说就是简化信息提取

防止undefined 传递 可以只用默认值 ,类似形参设置默认值

剩余参数只能放在最后

使用场景:交换 2 个变量 a b 必使用 分号 ‘;’

3.2 对象解构

属性名 和 变量名相同 对象解构是按照属性名一一对应的 即只要属性名和变量名相同 , 顺序可以不同

改变变量名 : 旧的变量名:新的变量名 注意: 旧的变量名要和属性名一致

3.3 数组对象解构

3.4 forEach
forEach只遍历数组 ,没有返回值,语法和map()类似 , arr.forEach(function (元素 , 【索引号可选】){})

Document xixixi xixixi xixixi xixixi xixixi
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值