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

第四天 深入学习JavaScript,包括函数、数组、对象、闭包等

深入学习JavaScript,包括函数、数组、对象、闭包等核心概念,是掌握这门语言的关键。以下是对这些概念的详细解析:

一、函数

JavaScript函数是一段可重复使用的代码块,用于执行特定的任务。它接受输入(参数),执行一系列操作,并可能返回输出(返回值)。函数在JavaScript中扮演着至关重要的角色,它使得代码更加模块化、可维护,并提高了代码的重用性。

  1. 定义与调用:使用function关键字定义函数,并指定函数名和参数列表。参数是可选的,用于传递输入值给函数。通过函数名加参数列表的方式调用函数。

  2. 特点

    • 模块化:将复杂的任务分解为更小的、更易于管理的部分。
    • 抽象性:隐藏实现细节,只暴露必要的接口。
    • 复用性:一旦定义了函数,就可以在需要的地方多次调用它。
    • 参数化:可以接受参数,使得代码更加灵活和通用。
  3. 高级概念

    • 闭包:允许函数访问并操作其外部词法环境中的变量。
    • 回调函数:作为参数传递给其他函数的函数。
    • 立即执行函数表达式(IIFE):在定义后立即执行的函数,常用于创建独立的命名空间。

二、数组

JavaScript的数组是通过Array构造函数创建的,也可以通过字面量语法[]直接声明。数组不仅用于存储数据,还提供了丰富的内置方法,使得数据的处理变得简单而高效。

  1. 基础操作:包括添加元素(pushunshift)、删除元素(popshift)、读取元素(通过索引)等。

  2. 内置方法

    • 遍历forEach()遍历数组的每个元素并执行提供的函数。
    • 转换map()创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后的返回值。
    • 搜索filter()创建一个新数组,新数组中的元素是通过检查指定函数而得出的所有元素;find()返回数组中满足提供的测试函数的第一个元素的值,否则返回undefined
    • 归约reduce()对累加器和数组中的每个元素(从左到右)应用一个函数,将其减少为单个输出值。
  3. 高阶操作

    • some()every():用于测试数组中是否至少有一个元素(some)或所有元素(every)满足某个条件。
    • sort():对数组的元素进行排序,并返回数组。排序不一定是稳定的,默认排序顺序是根据字符串Unicode码点。
    • splice():通过删除或替换现有元素或者添加新元素来改变一个数组的内容。

三、对象

Object是JavaScript的一种数据类型,它用于存储各种键值集合和更复杂的实体。

  1. 创建对象:可以通过Object构造函数或者使用对象字面量的方式创建对象。

  2. 属性

    • 数据属性:包含一个保存数据值的位置,以及4个特性描述它们的行为([[Configurable]][[Enumerable]][[Writable]][[Value]])。
    • 访问器属性:不包含数据值,包含一个获取(getter)函数和一个设置(setter)函数。
  3. 定义与读取属性:使用Object.defineProperty()来修改属性的默认特性;使用Object.getOwnPropertyDescriptor()方法读取属性的特性。

  4. 合并对象:使用Object.assign()方法,该方法实际上对每个源对象执行的是浅复制。

四、闭包

闭包是JavaScript中一个重要的概念,它允许函数访问并操作其外部词法环境中的变量。闭包使得函数可以记住并访问其被创建时的环境,即使在该函数在其外部词法环境之外执行时也是如此。

  1. 定义:一个函数以及其捆绑的周边环境状态(词法环境)的引用捆绑在一起,这样的组合就是闭包。

  2. 形成条件

    • 函数被定义在一个外部函数的作用域中。
    • 函数引用了其外部作用域中的变量。
    • 外部函数将函数返回给调用者(或者说函数被引用包围)。
  3. 应用场景

    • 模块封装:将私有变量和公共方法封装在一个函数中,从而避免全局变量的污染。
    • 事件处理:实现事件处理函数的绑定和解绑。
    • 异步编程:实现异步编程中的回调函数。
  4. 内存管理:虽然闭包有很多优点,但它也可能导致内存泄漏和性能问题。当不再需要访问闭包中的变量时,要及时解除对变量的引用,以避免内存泄漏。可以考虑使用WeakMap来存储数据,以减少内存泄漏的风险。

通过深入学习以上JavaScript的核心概念,你将能够更好地理解这门语言的本质,并编写出高质量的JavaScript代码。


http://www.kler.cn/a/514057.html

相关文章:

  • npm操作大全:从入门到精通
  • c语言的分支与循环
  • vif-方差膨胀因子计算
  • 工业相机 SDK 二次开发-Halcon 插件
  • leetcode 面试经典 150 题:插入区间
  • linux如何并行执行命令
  • VUE3 vite下的axios跨域
  • React 中hooks之 React.memo 和 useMemo用法总结
  • 红外热成像之无人机载荷
  • 跨站脚本攻击(XSS)原理及防护方案
  • 优秀代码段案例__笔记
  • C++11的多线程
  • 亚博microros小车-原生ubuntu支持系列:1 键盘控制
  • Prometheus部署及linux、mysql、monog、redis、RocketMQ、java_jvm监控配置
  • QT 中 UDP 的使用
  • 专业138总分400+中国科学技术大学843信号与系统考研中科大电子信息通信生医先研,真题,大纲,参考书。
  • Java面试专题——常见面试题1
  • (5)STM32 USB设备开发-USB键盘
  • TiDB 的优势与劣势
  • 基于卷积神经网络的验证码识别
  • oneplus3t-lineageos-16.1编译-android9,
  • 机器学习有哪些应用场景
  • Java后端Controller参数校验的一些干货及问题~
  • element-plus中的table为什么相同的数据并没有合并成一个
  • Ollama能本地部署Llama 3等大模型的原因解析(ollama核心架构、技术特性、实际应用)
  • html转义符+h5提供的新标签