首页 > 编程语言 >【JS】JavaScript进阶 ES6 - 黑马视频笔记

【JS】JavaScript进阶 ES6 - 黑马视频笔记

时间:2023-02-22 21:12:19浏览次数:52  
标签:ES6 进阶 作用域 函数 JavaScript 回收 访问 内存 变量

1. 作用域

作用域(scope)规定了变量能够被访问的“范围”,离开这个范围变量便不能被访问。

分为:局部作用域、全局作用域。

1.1 局部作用域

局部作用域分为:函数作用域、块作用域。

1. 函数作用域

在函数内部声明的变量只能在函数内部被访问,外部无法直接访问。

函数的参数也是函数内部的局部变量。函数执行完毕,函数内部的变量实际被清空了。

2. 块作用域

在JavaScript中使用 { } 大括号包裹的代码称为代码块,代码块内部声明的变量,外部有可能无法被访问。

let 声明的变量会产生块级作用域, var 不会产生块级作用域。

const 声明的常量也会产生块作用域。

不同代码块之间的变量无法互相访问。

推荐使用 let 或 const 。

for 循环声明的变量,虽然在{ }外面,但是for是一个整体,默认变量都在{}里面。还有 if while 等等。

1.2 全局作用域

<script> 标签和 .js文件的最外层都是全局作用域。全局作用域中声明的变量,任何其他作用域都可以访问。

注意:

1.为 window对象动态添加的属性默认也是全局的,不推荐,比如 a=10,其实就是 window.a=10。

2.函数中未使用任何关键字声明的变量为全局变量,不推荐。

3.尽可能少声明全局变量,防止全局变量被污染。

1.3 作用域链   【重点】

作用域链 本质上是底层的变量查找机制。

可以理解为就近原则、冒泡。

在函数被执行时,会优先查找当前函数作用域中查找变量。如果找不到,则会依次逐级查找父级作用域直到全局作用域。

1. 嵌套关系的作用域串联起来形成了作用域链

2. 相同作用域链中按着从小到大的规则查找变量

3. 子作用域可以访问父作用域,但父级作用域无法访问子作用域。

1.4 垃圾回收机制

内存的生命周期

js中分配的内存,一般有如下生命周期:

1. 内存分配:声明变量、函数、对象时,系统自动分配

2. 内存使用:读写内存,也就是使用变量、函数等

3. 内存回收:使用完毕,由垃圾回收器自动回收不再使用的内存

声明:

全局变量一般不会回收(关闭页面回收)

一般情况下局部变量的值,不用了,会被自动回收。

js垃圾回收机制-算法说明

引用计数。

定义“内存不再使用”,看一个对象是否有指向它的引用,没有引用就回收对象。

被引用一次,就计数+1,减少一个引用就-1,为0时,就释放内存。

标记清除法。

现代浏览器已经不再使用引用计数法了。

就是从根部(全局对象)出发,能到达就还是需要使用的,无法到达的就回收。

1.5 闭包 

一个函数对周围状态的引用捆绑在一起,內层函数中访问到其外层函数的作用域。

简单理解:闭包 = 内层函数 + 外层函数的变量   

function A() {
    const a = 1
    function B() {
        console.log(a)
    }
    B()
}
A()

内层函数 function B() 和 变量a 与调用函数B() 属于闭包。

闭包作用:封闭数据,提供操作,外部也可以访问函数内部的变量。

 

标签:ES6,进阶,作用域,函数,JavaScript,回收,访问,内存,变量
From: https://www.cnblogs.com/hynz/p/17145411.html

相关文章

  • 【JavaScript】JS引擎中执行上下文如何顺序执行代码
    首先我们知道JavaScript引擎包括一个调用栈和堆,调用栈是代码实际执行的地方,使用执行上下文(执行环境)来完成;堆是非结构化的内存池,存储了应用程序所需要的所有对象。执行上......
  • SQL进阶-存储引擎
    1.MySQL体系结构连接层最上层是一些客户端和链接服务,主要完成一些类似于连接处理、授权认证、及相关的安全方案。服务器也会为安全接入的每个客户端验证它所具有的......
  • 各种情况的箭头函数 es6 230222
    无参无返回varfn=()=>{console.log(666)}fn()无参有返回varfn=()=>{return123}varres=fn()alert(res)有参无返回varfn=(num1,num2)=>{cons......
  • 使用剩余参数完成不定长参函数定义 es6 230222
    需求定义一个方法接收任意多个参数返回它们的和技能点在形参前加上三个点可以让这个形参变成 数组这个数组可以接收无限多个数据我们可以在方法体中遍历数组进行想要的操作......
  • Javascript进阶
    Javascript进阶一.变量提升看以下代码,或多或少会有些问题的.functionfn(){console.log(name);varname='大马猴';}fn()发现问题了么.这么写代码,......
  • E005Web学习笔记-JavaScript(三):BOM
    一、简单学习DOM1、控制(增删改查)HTML文档的内容; 2、代码:获取页面的标签(元素)对象Element;document.getElementById();//通过元素的ID获取元素......
  • E006Web学习笔记-JavaScript(四):DOM
    一、概述1、简介DocumentObjectModel文档对象模型;将标记语言文档的各个部分,封装为对象,可以使用这些对象,对标记语言文档进行CRUD(增删改查)的动......
  • E007Web学习笔记-JavaScript(五):JS事件
    一、概述1、事件概念某些组件被执行了某些操作后,触发某些代码的执行;事件:某些操作,如点击,双击,鼠标移动,键盘按下……; 2、事件源组件,如按钮、文......
  • E004Web学习笔记-JavaScript(二):JS对象
    一、Function1、概述是一个函数对象; 2、Function:函数(方法)对象①创建//1、方法1(不建议使用)varfun=newFunction(形参列表,方法体);示......
  • Javascript基础入门
    Javascript基础入门​ JavaScript,是一门能够运行在浏览器上的脚本语言.简称JS.首先,Javascript这个名字的由来就很有意思,不少人认为Javascript和Java貌似很像.容......