前端day23--JS进阶(作用域,垃圾回收机制,闭包,剩余参数,箭头函数,解构)

news2025/1/13 10:15:13

目录

作用域

局部作用域

函数作用域

块作用域

全局作用域

作用域链

JS垃圾回收机制

垃圾回收机制算法说明:

引用计数法(了解):

标记清除法:

闭包

为什么要有闭包?

闭包的风险→内存泄漏

变量提升

函数进阶

函数提升

函数参数

动态参数arguments

剩余参数...

vs展开运算符

箭头函数

基本语法

箭头原函数参数

箭头函数this

解构赋值

数组解构

js中两种必须加分号情形

变量少,单元值多

变量多,单元值少

按需导入

多维数组解构

对象解构

解构时修改变量名

多级对象解构


作用域

规定了变量被访问的“范围”,离开了这个范围变量将不能被访问。

局部作用域

函数作用域

块作用域

不同块之间是无法相互访问的。这里的有可能是指若用var声明变量,则不会产生块作用域

全局作用域

尽可能少地声明全局变量

作用域链

作用域链是变量查找机制。

依次逐级地往外查找。

JS垃圾回收机制

内存泄漏:分配的内存由于某种程序未释放或者无法释放叫内存泄漏

垃圾回收机制算法说明:

引用计数法(了解):

标记清除法:

因此这就是为什么函数执行完后其内部变量会被释放,就是遵循标记清除法的垃圾回收机制。

闭包

里层函数用到了外层函数声明的变量→产生闭包

为什么要有闭包?

通常是里层函数可访问外层函数变量

但若外层函数要访问内层函数的变量此时可以使用闭包方式

闭包的风险→内存泄漏

因为result = fun() 为全局变量,指向fn() i被反复使用,因此由标记清除法,i能被根节点找到→i作为局部变量无法被释放→内存泄漏

变量提升

变量提升,即在执行代码之前会将当前作用域所有var声明的此变量提升,只提升声明,不提升赋值。let/const 不存在变量提升,实际开发中仍先声明后使用。

→  undefined件  10

实际上,上述代码因为变量提升的只提升声明不提升赋值,因此等价于

函数进阶

函数提升

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

只提升函数声明,不提升函数调用。

若对此种函数进行var赋值,由于var的变量提升(只提升声明,不提升赋值(函数表达式),则)

因此,函数表达式(因为需赋值)必须先声明后调用

函数参数

动态参数arguments

当不确定函数会传递多少个参数时,用动态参数。是伪数组。

剩余参数...

  剩余参数也是只存在于函数里面是真数组!

vs展开运算符

将数组进行展开。数组展开后元素之间是有逗号的。

而展开运算符 是正常情形下都可以用!

箭头函数

箭头函数 特别重要!

基本语法

箭头函数主要是用在函数表达式中。

 箭头函数的目的就是简化代码。

函数体只有一行且为return时 return可以省略

因为对象的{}与函数的{}冲突了 因此得用()包起来

箭头原函数参数

箭头函数this

以前this的指向,粗略的规则,谁调用的这个函数,this就指向谁。对象里头的方法this指向是指向对象本身。但是!箭头函数没有this,因此其中的this要到上一层的作用域链中寻找

解构赋值

数组解构

利用数组解构来交换两个变量,则不需要像以前那样声明中间变量

js中两种必须加分号情形

其中一种为数组解构前面有语句的

变量少,单元值多

可采用剩余参数来解决变量少单元值多的问题

变量多,单元值少

类似函数形参初始化的写法,来避免变量多单元制少的问题

按需导入

多维数组解构

 

对象解构

解构时修改变量名

多级对象解构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1071045.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端uniapp如何修改下拉框uni-data-select下面的uni-icons插件自带的图片【修改uniapp自带源码图片/图标】

目录 未改前图片未改前源码未改前通过top和bottom 和修改后图片转在线base64大功告成最后 未改前图片 未改前源码 然后注释掉插件带的代码,下面要的 未改前通过top和bottom 和修改后 找到uni-icons源码插件里面样式 图片转在线base64 地址 https://the-x.cn/b…

防火墙是什么?F5保护Web应用的思路解读

Web 应用防火墙 (WAF) 是保护 Web 应用的必要措施。如今,WAF 需要在部署环境不断扩展但人员技能有限的情况下,保护数量日益增长的应用。那么防火墙是什么?作为一家提供多云应用安全和应用交付的公司,F5为保护Web应用又打造出哪些产…

javaWeb宠物领养系统

一、引言 1.1 系统背景 计算机网络的发展,促进了社会各行业的进步,带来了经济快速增长。管理员通过流浪宠物的信息,在平台上和领养人进行实时的交流,达成领养协议。用户登录后,把想要领养的宠物向本平台发起申请&…

软件安全测试的含义是什么?

早在信息行业发展的初期,就有互联网公司意识到了保护软件产品安全的重要性,可时至今日,我们总能够从报道中瞥见某某公司遭黑客入侵导致信息泄露的新闻,其中甚至不乏Facebook这些以用户通讯、身份信息为支柱产业的大厂。 信息安全事…

【全网最详细的OSPF原理总结,看这篇就够了!】

OSPF是一种基于链路状态的路由协议,也是专为 IP 开发的路由协议,直接运行在 IP 层上面。它从设计上保证了无路由环路。除此之外,IS-IS也是很常见的链路状态协议。 为什么会出现OSPF? 作为目前主流的IGP协议,OSPF主要…

vs code拉取代码到本地汉字乱码--解决

首先,默认情况下,我们使用VS Code打开一个utf-8编码的文件和一个gb2312编码的文件,期中gb2312文件乱码了。 VSCode通常默认UTF-8编码。 解决方法: 点击右下角的编码按钮(图中为UTF-8),然后选…

46 二叉树展开为链表

二叉树展开为链表 理解题意:前序遍历的N种写法题解1 前序遍历题解2 反前序遍历(代码简洁)题解3 类似旋转的方法题解4 迭代题解5 同时遍历改左右子树 给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNo…

判断当日是否为当月第一个交易日——时间相关函数3

本文介绍的函数用于判断当前交易日是否为当月的第一个交易日。 在某些策略中,可能会在每月的第一个交易日进行调仓换股。这时,就可以使用本文介绍的函数判断当日是否为当月的第一个交易日。 源码 def is_first_trading_day_of_month():""&q…

老虎证券当前股价已严重背离基本面,下半年收入将下滑

来源:猛兽财经 作者:猛兽财经 老虎证券近期股价表现优异 在过去的一个月里,老虎证券(TIGR)的股价表现令人惊叹,其估值也大幅上升。 在过去一个月里,老虎证券的股价上涨了45.0%,而同期以标普500指数为代表的…

VMWare Vcenter Server克隆虚拟机所用端口

Vcenter server 管理ESXi主机时需要用到的端口主要有443和902端口,很多文档都要求双向通信,实际上可以通过查看ESXI主机的防火墙配置了解相关端口。 1. ESXi 对外提供的端口 主要是有 vsphere Web client 服务的入站端口: TCP 902 和 TCP 4…

Javascript之Object、Array

Object.keys 对象的键转化为数组 Object.values 对象的属性值转化为数组 Object.assign 对象的合并 Array.from() 伪数组对象的属性值转化为数组。类似Object.values Array. reduce(function(prev, currentValue, currentIndex, arr), initialValue) 数组多个元素的值合并减为单…

平板第三方电容笔怎么样?便宜的ipad触控笔推荐

苹果原装的电容笔与国产的平替电容笔最大的区别在于,平替电容笔只有一个斜面压力感应,而苹果电容笔既有斜面压力感应,又有重力压力感应。但是,如果你不经常使用它来进行绘画的话,你也不必买选择这款苹果电容笔&#xf…

Acwing.800 数组元素的目标和

题目 给定两个升序排序的有序数组A和B,以及一个目标值x。数组下标从0开始。请你求出满足A[i]Bi]x的数对(i, j)。 数据保证有唯一解。 输入格式 第一行包含三个整数n,m,x,分别表示A的长度,B的长度以及目标值x。第二行…

awk 命令

语法格式: awk [选项参数] ‘/pattern1/{action1} /pattern2/{action2}...’ filename pattern:表示 awk 在数据中查找的内容,就是匹配模式 action:在找到匹配内容时所执行的一系列命令awk常见参数选项: awk常见内置变…

❋JQuery的快速入门2 jq鼠标滚轮

onmousewheelscript当鼠标滚轮正在被滚动时运行的脚本。 主要是利用top与left进行上下移动和左右移动 【使用获取的角度正值还是负值,判断是向上还是上下滚动】 $(element).on("mousewheel", function(event){var de event.originalEvent.deltaY; //需要…

机器学习之旅-从Python 开始

你想知道如何开始机器学习吗?在这篇文章中,我将简要概括一下使用 Python 来开始机器学习的一些步骤。Python 是一门流行的开源程序设计语言,也是在人工智能及其它相关科学领域中最常用的语言之一。机器学习简称 ML,是人工智能的一…

Swift SwiftUI CoreData 过滤数据 2

预览 Code import SwiftUI import CoreDatastruct HomeSearchView: View {Environment(\.dismiss) var dismissState private var search_value ""FetchRequest(entity: Bill.entity(),sortDescriptors: [NSSortDescriptor(keyPath: \Bill.c_at, ascending: false)…

redis(4)-hiredis-API函数的调用

1.下载安装编译 windowslinuxredis下载 redis-plus-plus-master.zip文件的下载 http://download.redis.io/releases/redis-7.2.0.tar.gz tar -zxvf redis-7.2.0.tar.gz //-z:gzip属性 ;-x:解压;-v:显示;-f:文件 make make install //m…

华为2023鲲鹏应用创新大赛,实在智能“信创RPA”再获殊荣

近期,面向全球开发者的顶级赛事鲲鹏应用创新大赛2023成功举办,旨在鼓励广大开发者基于鲲鹏全栈根技术,围绕产业真实难题,共同打造基础软/硬件解决方案,吸引了1400多支团队同台竞技,贡献了一场精彩纷呈的创新…

Java小白找工作必须领悟的修仙秘籍(一)

当我们走出校园,步入社会,必须得找工作,那么作为it小白你必须拥有过硬的基础应用知识,才能慢慢的适应工作的节奏,以下内容则都是基础中的基础,需要全部进行掌握,因为这里可能有你面试时需要回答…