当前位置: 首页 > news >正文

【JavaScript】JavaScript 进阶-1(更新中)

目录

  • 作用域&解构&箭头函数
    • 作用域 2024.10.23
      • 局部作用域
      • 全局作用域
      • 作用域链(变量查找机制)
      • JS垃圾回收机制GC
      • 闭包 Closure(内层函数+外层变量)
      • 变量提升
    • 函数进阶 2024.10.24
      • 函数提升
      • 函数参数
      • 箭头函数(重要)
    • 解构赋值 2024.10.24
    • *综合案例

作用域&解构&箭头函数

作用域 2024.10.23

局部作用域

  • 函数作用域
  • 块作用域(大括号{}内部)
    let、const 会产生块作用域,var不会(不推荐使用)

全局作用域

  • script 标签、.js文件最外层 (尽量少使用)

作用域链(变量查找机制)

  • 就近原则:优先查找当前作用域,逐级查找父级作用域,直到全局作用域

JS垃圾回收机制GC

  • 生命周期(内存分配、使用、回收)
    全局变量一般不回收,局部变量自动回收
  • 内存泄露(内存未释放或无法释放)
  • 算法说明
    栈:自动,基本数据类型
    堆:手动,复杂数据类型
    • 引用计数法(不再使用的对象——跟踪记录被引用的次数)
      问题:嵌套/循环引用——内存无法释放——内存泄露
    • *标记清除法(无法达到的对象——标记根部可到达——回收未被标记的)
      解决了嵌套/循环引用

闭包 Closure(内层函数+外层变量)

// 简单写法
function outer(){const a = 1function f(){console.log(a) //内层函数访问到外层函数的作用域}f()
}
outer()// 常见写法
function outer(){const a = 1return function(){console.log(a)}
}
const fun = outer()
fun() //调用函数
  • 作用:外部访问函数内部的变量
  • 应用:实现数据私有(数据封装)
function count(){let i = 0return function(){i++console.log(i)}
}
const fun = count()
fun() //调用函数
  • 问题:内存泄露

变量提升

把所有var的变量声明提升到当前作用域的最前面

注意: 只提升变量声明,不提升变量赋值; let、const不存在变量提升; 相同的作用域; 推荐先声明再访问

函数进阶 2024.10.24

函数提升

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

// 错误
fun()
var fun = function(){console.log("函数表达式 不存在提升")
}

函数参数

  • 动态参数 (arguments: 伪数组)
  • 剩余参数 (…arr: 真数组):推荐使用

展开运算符: …
应用:

Math.max(...arr) //数组最大值
const arr = [...arr1, ...arr2] //合并数组

箭头函数(重要)

  • 使用场景:替代匿名函数
  • 基本语法:
const fn = function(){} // 匿名函数
const fn = () => {} // 箭头函数
const fn = x => console.log(x) 
const fn = x => x + x
const fn = () => ({key:value})
  • 注意:表达式函数,无函数提升;
  • 箭头函数参数:无动态参数,有剩余参数
  • this:
    传统:谁调用指向谁;箭头函数没有自己的this,指向上一层作用域的this(事件监听DOM回调函数不推荐使用箭头函数)

解构赋值 2024.10.24

*综合案例


http://www.mrgr.cn/news/57490.html

相关文章:

  • @Autowired和@Resource的用法与区别
  • 深度学习 之 模型部署 使用Flask和PyTorch构建图像分类Web服务
  • Fast Simulation of Mass-Spring Systems in Rust 论文阅读
  • Metasploit渗透测试之模块学习与开发
  • scala 抽象类
  • 使用Maven前的简单准备
  • 企业架构蓝图:驱动数字化转型的战略指南与实施路径
  • 洛科威岩棉板:引领住宅与工业领域的绿色可持续发展
  • PCL 高斯滤波(永久免费版)
  • 网络营销师:普通人一定要知道这3个知识点
  • [241024] Mistral AI 发布 Ministral 3B 和 8B | GSAP加入Webflow,动画未来更精彩!
  • 基于springboot+vue实现的助学兼职系统(源码+L文+ppt)4-092
  • vue使用xlsx以及file-saver进行下载xlsx文件以及Unit8Array、ArrayBuffer、charCodeAt的使用
  • Zynq(4)MIO中断
  • 指针进阶(二)(C 语言)
  • 【1024特辑 | 机器学习-无监督学习】EM算法
  • 从文本到知识图谱:GraphRAG 各步骤的技术拆解与实现
  • django教育网站-计算机设计毕业源码89335
  • QML----Webengineview点击网页上的下载没反应,下载文件
  • 关于搜索接口被攻击,如何优化思路
  • 背包九讲——混合背包问题
  • 华为OD机试真题---We Are A Team
  • paddleocr使用FastDeploy 部署工具部署 rknn 模型
  • 智能扭矩系统Torque在新能源领域的应用_SunTorque
  • threejs中的小案例
  • autMan奥特曼机器人-出现argument list too long报错的解决方法