js高级-作用域

1,作用域

1.1什么是作用域:

变量能够被访问的范围

1.2 作用域的分类:

全局作用域 与 局部作用域

1.2.1 局部作用域 :

函数作用域(在函数内部声明 并 只能在函数内部使用,外部无法直接访问 ) 与 块作用域(js中被{}包裹的代码块)

1.2.2 全局作用域

1.位于 script 与 js 文件最外层 2. 全局作用域声明的变量其他作用域也可以使用

2. 作用域链

2.1 本质

底层的变量查找机制

2.2 嵌套关系的作用域组成了作用域链

当函数被执行时,会 优先查找 在 当前函数作用域 中 查找变量。如果当前函数作用域中未查询到变量,则会向 该函数的 父级作用域 查找,直至全局作用域

2.3 注意

1.父级作用域 无法访问 子级作用域

2.就近原则

3. 垃圾回收机制

3.1 内存的生命周期

1.内存分配(声明变量,函数,对象)

2.内存使用(对声明的 变量,函数,对象 进行使用)

3.内存回收(使用完毕 垃圾回收机制 内存进行回收)

3.2 内存泄漏

分配的内存 未释放 或者 无法释放

3.3 注意

全局变量:关闭页面回收

局部变量:使用完进行回收

3.4 垃圾回收算法

3.4.1 引用计数法

  1. 原理: 观察 对象 是否 有指向它的 引用, 当引用次数为0 则进行 回收

  1. 弊端: 当多个对象进行 嵌套引用 时 ,对象的 引用次数 不会为 0,导致无法回收,形成内存泄漏

3.4.2 标记清除法

  1. 原理:全局变量 定时 扫描 内存中的对象。到达的对象,表示任在使用,不能到达的对象 会被标记 ,进行回收

4. 闭包

4.1 概念

一个函数对周围的引用状态捆绑在一起,内层函数能访问到外部函数的作用域

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

4.2 作用

封闭数据,实现数据私有,外部可以访问到函数内部的变量

4.3 风险

内存泄露

5. 变量提升

var 声明的 变量 提升到 当前作用域 的 最前面

只提升 变量声明 ,不提升 变量赋值

导致 未声明使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值