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

将 JavaScript 源文件的全部内容包装在立即调用的函数中的原因是什么?

这种技术在 JavaScript 库中很常见。它围绕文件的全部内容创建了一个闭包,从而创建了一个私有命名空间,从而有助于避免不同 JavaScript 模块和库之间潜在的名称冲突。立即调用该函数,以便为命名空间(库名称)分配函数的返回值。

const myLibrary = (function() {
  var privateVariable = 2
  return {
    publicMethod: () => privateVariable
  }
})()
privateVariable // ReferenceError
myLibrary.publicMethod() // 2

JavaScript 中唯一不等于自身的值是什么?

NaN(Not-a-Number) 是与任何比较运算符进行比较时唯一不等于自身的值。NaN通常是无意义的数学计算的结果,因此将两个NaN值视为相等是没有意义的。

什么是递归,什么时候有用?

递归是一个过程的重复应用。在 JavaScript 中,递归涉及重复调用自身直到达到基本条件的函数。基本条件跳出递归循环,否则函数将无限期地调用自身。当处理包含嵌套层数未知的数据结构时,递归非常有用。

例如,您可能有一个从数据库返回的评论线程,这些评论存在于平面数组中,但需要嵌套以在 UI 中显示。每个评论要么是顶级评论(无父评论),要么是对父评论的回复。评论可以是回复的回复……我们事先不知道评论的深度可能是多少。这就是递归可以提供帮助的地方。

const nest = (items, id = null, link = "parent_id") =>
  items
    .filter(item => item[link] === id)
    .map(item => ({ ...item, children: nest(items, item.id) }))

const comments = [
  { id: 1, parent_id: null, text: "First reply to post." },
  { id: 2, parent_id: 1, text: "First reply to comment #1." },
  { id: 3, parent_id: 1, text: "Second reply to comment #1." },
  { id: 4, parent_id: 3, text: "First reply to comment #3." },
  { id: 5, parent_id: 4, text: "First reply to comment #4." },
  { id: 6, parent_id: null, text: "Second reply to post." }
]

nest(comments)
/*
[
  { id: 1, parent_id: null, text: "First reply to post.", children: [...] },
  { id: 6, parent_id: null, text: "Second reply to post.", children: [] }
]
*/

在上面的示例中,如果filter()返回一个空数组,则满足基本条件。被链接map()的不会调用包含递归调用的回调函数,从而打破循环。

相关文章:

  • #pragma pack(1)
  • 联动枚举设计
  • 视频批量添加透明水印,必须用这个方法
  • JS获取/修改文本框输入的内容value,修改div标签中的内容:innerHTML、innerTest
  • 我的世界Minecraft Java开服教程(Windows)开服器开服包下载开服网站服务器开服核心开服端开服软件mac版Java启动器资源包
  • java计算机毕业设计物业管理系统源码+系统+数据库+lw文档+mybatis+运行部署
  • Linux下把Tomcat做成服务,并开机自启(方式2-systemctl)
  • java计算机毕业设计西宁市农副产品物流信息系统源码+系统+数据库+lw文档+mybatis+运行部署
  • Python高校学生档案管理系统毕业设计源码071528
  • ​Linux·i2c驱动架构​
  • git代码仓库更换
  • SS【1】:转置卷积与膨胀卷积
  • tensorflow2从入门到精通——自编码器系列原理以及实现
  • python的opencv操作记录(五) - 空间域与频域转换
  • java学习day41(JavaWeb)JavaScript高级
  • 【Linux系统编程】快速查找errno错误码信息
  • 77. Combinations
  • Effective Java 笔记(一)
  • HomeBrew常规使用教程
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • IndexedDB
  • Javascript编码规范
  • Netty 4.1 源代码学习:线程模型
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • Swoft 源码剖析 - 代码自动更新机制
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 如何学习JavaEE,项目又该如何做?
  • 跳前端坑前,先看看这个!!
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 一个项目push到多个远程Git仓库
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​ubuntu下安装kvm虚拟机
  • #define用法
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (简单) HDU 2612 Find a way,BFS。
  • (篇九)MySQL常用内置函数
  • (全注解开发)学习Spring-MVC的第三天
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • **PHP分步表单提交思路(分页表单提交)
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .Net Core 中间件验签
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • .NET关于 跳过SSL中遇到的问题
  • .NET面试题(二)
  • .sh
  • /etc/sudoers (root权限管理)
  • /run/containerd/containerd.sock connect: connection refused