JS_ES6(1)

作用域链:

作用域链是底层变量查找的机制:当函数执行时,优先查找当前函数作用域中有无需要用到的变量,如果找不到,逐级查找父级,直到全局 => 嵌套关系形成作用域链,同一作用域链从小到大查找变量,子可访父,父不可访子

垃圾回收机制:

1.全局变量一般不回收

2.JS中内存的分配和回收都是自动的内存不用的时候被自动回收

3.内存泄漏现象:分配的内存因为某种原因程序未释放,或无法释放

4.栈:由系统自动分配释放函数的参数值,局部变量等,基本数据类型放到栈里

5.堆:一般由程序员分配,程序员不释放,由垃圾回收机制回收,复杂数据类型放堆里

垃圾回收的方法:

1.引用计数法:

跟踪记录引用的次数,引用一次++,减少引用--,次数归0,释放内存。

缺陷:嵌套引用 / 循环引用 / 两个变量相互引用时,不回收,导致内存泄漏

2.标记清除法:

能从根部(window)到达的,就是有用的

不能从根部到达的,就是无用的

无用的就标记,稍后回收

闭包:

1.概念 / 判断方法:

内层函数用到了外层函数的变量

2.用处:

作用1:保存私有变量,防止在该变量被恶意修改 / 污染       

作用2:可以读取函数内部的变量

3.说明举例:

例子:定义一个变量ant=0,用来记录某个函数的使用次数

1.当该变量为全局变量时
<script>let ant = 0function a() {ant++console.log(ant);}a() //1a() //2
</script>

        如果程序还有其他函数,也需要用到age的值,则会受到影响,而且全局变量还容易被人修改,比较不安全。

        这就是全局变量容易污染的原因,所以我们必须解决变量污染问题,那就是把变量封装到函数内,让它成为局部变量。

2.当该变量为局部变量时
<script>function out() {let ant = 0function ini() {ant++console.log(ant);}return ini //返回ini函数}out()//ini函数out()//ini函数
</script>

显而易见,每次调用out函数,都会使ant重新赋值,因此ant的值做不到增加

3.使用闭包=>跳过out直接调用内层函数时
<script>function out() {let ant = 0function ini() {ant++console.log(ant);}return ini //返回ini函数}out()//ini函数out()//ini函数let ii = out()//ii===iniii()//1ii()//2
</script>

一旦调用out(),都会使ant重新回归到初始值++的状态

而且变量ant在函数内部,不易修改和外泄,相对来说比较安全。

4.缺点

缺点1:导致变量不会被垃圾回收机制回收,造成内存消耗

缺点2:不恰当的使用闭包可能会造成内存泄漏的问题

变量/函数提升:

1.变量提升(使用var时):

即:允许变量在声明之前被访问

变量的 《声明》(不提升赋值) 会在物理层面移动到当前 《作用域》代码的最前面。

 但这么说并不准确。实际上变量和函数声明在代码里的位置是不会动的,而是在编译阶段被放入内存中。

2.函数提升:

会把所有函数声明提升到当前作用域的最前面,只提声明,不提调用

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

函数的其他参数(除形参实参):

1.动态参数(箭头函数没有)arguments(伪数组=>只有下标和length)

    <script>function Add() {let res = 0for (i = 0; i < arguments.length; i++) {res += arguments[i]}console.log(res);}Add(1, 2, 34, 5, 6, 7)Add(3, 2, 1, 4, 53)Add(1, 2, 3, 43, 2, 1, 2, 4)</script>

如上方代码所示,当括号内为空时,会将参数存到一个伪数组arguments里,伪数组只能用下标和length功能

2.剩余参数  ...名字(真数组)

<script>function add(a, b, ...wcnm) {console.log(wcnm);}add(12, 3, 4, 5)
</script>

如上方代码所示,当括号内有  ...名字  时,多余的参数会被整合成数组  名字  保存起来

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

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

相关文章

taro3兼容支付宝/微信小程序的自定义拖拽排序组件

描述&#xff1a;列表可以完成拖拽排序 此组件是根据支付宝原生文档改编成taro-vue3的形式&#xff0c;只保留了拖拽的部分&#xff0c;其他功能都去除了&#xff0c;测试下来可以兼容支付宝和微信小程序。 支付宝原生文档&#xff1a; https://opendocs.alipay.com/support/…

BGP(border gateway protocol)边界网关协议初识篇

BGP它是一种路径矢量协议&#xff0c;用于决定数据包在互联网中的最佳路径。 1、工作原理&#xff1a; 自治系统&#xff08;AS&#xff09;间路由: BGP主要用于连接不同自治系统之间的路由器&#xff0c;其中每个自治系统&#xff08;AS&#xff09;代表一组具有共同路由的网…

编译 fdk-aac

文章目录 关于 fdk-aac编译 fdk-aac在 FFMpeg 编译中启用 关于 fdk-aac A standalone library of the Fraunhofer FDK AAC code from Android. github &#xff1a; https://github.com/mstorsjo/fdk-aac代码托管 &#xff1a; https://sourceforge.net/projects/opencore-am…

最新巨量X-Bogus、_signature参数逆向分析与算法还原

文章目录 1. 写在前面2. 接口分析3. 断点分析4. 扣代码补环境5. 数据解密 【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路…

# 从浅入深 学习 SpringCloud 微服务架构(十六)

从浅入深 学习 SpringCloud 微服务架构&#xff08;十六&#xff09; 一、SpringCloudStream&#xff1a;自定义消息通道 1、在子工程 stream_product &#xff08;子模块&#xff09;中,创建 自定义的消息通道类 MyProcessor.java /*** spring_cloud_demo\stream_product…

JavaEE概述 + Maven

文章目录 一、JavaEE 概述二、工具 --- Maven2.1 Maven功能 仓库 坐标2.2 Maven之项目构建2.3 Maven之依赖管理 三、插件 --- Maven Helper 一、JavaEE 概述 Java SE、JavaEE&#xff1a; Java SE&#xff1a;指Java标准版&#xff0c;适用于各行各业&#xff0c;主要是Java…

【负载均衡式在线OJ项目day5】OJ服务模块概要

前言 经过四天的努力已经完成了编译运行这个大模块&#xff0c;今天将要进入OJ服务模块设计&#xff0c;该模块的本质就是建立一个小型网站 一.功能 为用户提供题目列表页面为用户提供网站首页(用题目列表充当首页)为用户提供指定题目的编辑页面为用户提供提交代码判题功能&a…

FFmpeg常用API与示例(二)—— 解封装与转封装

封装层 封装格式(container format)可以看作是编码流(音频流、视频流等)数据的一层外壳&#xff0c;将编码后的数据存储于此封装格式的文件之内。 封装又称容器&#xff0c;容器的称法更为形象&#xff0c;所谓容器&#xff0c;就是存放内容的器具&#xff0c;饮料是内容&…

【QT学习】补充:qt使用已经存在的类

1.右键项目--》添加现有文件 注意&#xff1a;不是添加新文件&#xff01;&#xff01;&#xff01; 2.添加配置

掌握Android Fragment开发之魂:Fragment的深度解析(上)

Fragment是Android开发中用于构建动态和灵活界面的基石。它不仅提升了应用的模块化程度&#xff0c;还增强了用户界面的动态性和交互性&#xff0c;允许开发者将应用界面划分为多个独立、可重用的部分&#xff0c;每个部分都可以独立于其他部分进行操作。本文将从以下几个方面深…

信息系统项目管理师0102:可行性研究的内容(7项目立项管理—7.2项目可行性研究—7.2.1可行性研究的内容)

点击查看专栏目录 文章目录 7.2项目可行性研究7.2.1可行性研究的内容1.技术可行性分析2.经济可行性分析3.社会效益可行性分析4.运行环境可行性分析5.其他方面的可行性分析记忆要点总结7.2项目可行性研究 可行性研究是在项目建议书被批准后,从技术、经济、社会和人员等方面的条…

OpenWrt项目UCI配置介绍

UCI&#xff08;Unified Configuration Interface&#xff09;是 OpenWrt 项目中使用的一种配置管理系统。它旨在为嵌入式设备提供一个统一且易于理解的配置接口。UCI 主要用于简化 OpenWrt 系统的各种配置过程&#xff0c;使得管理网络、服务和其他系统参数变得更加方便。 1 …

String的substring()方法导致的内存泄露问题

JDK 6的实现 String(int offset, int count, char value[]) {this.value value;this.offset offset;this.count count; }public String substring(int beginIndex, int endIndex) {//check boundaryreturn new String(offset beginIndex, endIndex - beginIndex, value);…

r语言数据分析案例-北京市气温预测分析与研究

一、选题背景 近年来&#xff0c;人类大量燃烧煤炭、天然气等含碳燃料导致温室气 体过度排放&#xff0c;大量温室气体强烈吸收地面辐射中的红外线&#xff0c;造 成温室效应不断累积&#xff0c;使得地球温度上升&#xff0c;造成全球气候变暖。 气象温度的预测一直以来都是…

[算法][差分][延迟相差][leetcode]2960. 统计已测试设备

题目地址&#xff1a; https://leetcode.cn/problems/count-tested-devices-after-test-operations/description/ 解法一&#xff1a;暴力解法 class Solution {public int countTestedDevices(int[] batteryPercentages) {//特殊条件判断if(null batteryPercentages || ba…

JavaScript DOM 对元素进行的操作

DOM&#xff08;Document Object Model&#xff09;是一种用于访问和操作HTML和XML文档的编程接口。JavaScript通过DOM提供的方法和属性可以对网页的元素进行各种操作&#xff0c;比如修改元素的内容、样式、属性等。 下面是一些常见的对DOM元素的操作以及相应的代码示例&…

@RequestMapping path正则规范

RequestMapping 注解是 Spring MVC 中用于映射 HTTP 请求的注解之一。它可以用于处理各种 HTTP 请求&#xff0c;包括 GET、POST、PUT、DELETE 等&#xff0c;并且可以指定请求的路径、请求方法、请求参数等信息。 在使用 RequestMapping 注解时&#xff0c;可以使用正则表达式…

51单片机入门:串口通信

串行通信的初步认识 通信方式分类 1、按照数据传送方式&#xff1a; 并行通信&#xff1a;通信时数据的各个位同时传送&#xff0c;可以实现字节为单位的通信。 但是通信线多&#xff0c;占用资源多&#xff0c;成本高。 串行通信&#xff1a;一次只能发送一位&#xff0c…

python把png转成jpg

在Python中&#xff0c;你可以使用PIL&#xff08;Python Imaging Library&#xff0c;也称为Pillow&#xff09;库来读取PNG图片并将其转换为JPG格式。下面是一个简单的示例代码&#xff1a; from PIL import Image# 打开PNG图片 png_image Image.open(input.png)# 保存为JP…

微软exchange邮箱发送

使用java发送exchange类型的邮件&#xff0c;foxmail中配置如下图&#xff1a; 需要的maven依赖如下&#xff1a; <dependency><groupId>com.microsoft.ews-java-api</groupId><artifactId>ews-java-api</artifactId><version>2.0</ve…