js进阶1

作用域:scope规定了作用的范围

局部作用域

全局作用域

1.1局部作用域

1.1函数作用域

在函数内部声明的变量,只能在函数内部使用

1.2块作用域

只在js代码块{}中起作用

全局作用域
作用域链

本质上是底层查找机制

在函数被执行时,优先查找最近的函数域

如果查找不到,会逐渐查找父级作用域,只到全局作用域

1.4垃圾回收机制

回收不被使用的内存

内存的生命周期

声明内存:声明对象时,系统会自动分配一块内存出来

使用内存:使用对象或者函数时,会使用内存

回收内存:使用完毕时,垃圾回收器,会回收不在使用的内存

注,全局变量,一般不会被回收,局部变量不用就会被回收

内存泄漏机制,一般由于某些错误,导致内存无法被回收(未释放或者无法释放的机制)

常见的垃圾回收算法:

引用计数法

定义,内容不在使用,即看一个对象是否有指向他的引用,没有就进行回收

跟踪记录他的引用次数,有引用就加1,没有引用就减一如果引用次数为0就释放内存

如果对象相互引用,导致对象无法进行回收

标记清除法

将不在使用的对象,定义为无法到达的对象

就是从根部出发时,定时扫描内存中的对象,凡是从根部到达的对象,根还是需要使用的

那些无法由根部出发,触及到的标记为为不在使用,然后进行回收

JS闭包

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

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

闭包的应用:实现数据的私有

比如,做一个统计函数调用的次数,函数调用一次就++

但闭包可能会引起内存泄漏

变量提升

js缺点,仅存在var中

定义,把所有var 声明的变量提升到当前作用域的最前面,但不赋值

函数进阶

函数提升

在声明之前就可以被调动

函数提升使函数的调用更加的灵活

函数表达式不存在提升现象

函数提升出现在相同作用域上

2.2 函数参数

动态参数

arguments 是函数内部内置的伪数组变量,它包含了调用函数时传入的所有参数

剩余参数

...是语法符号,置于最末函数形参之前,用于获得多余的参数

借助。。。获取多余实参,是个真数组

动态参数是伪数组

开发中,还是提倡多使用剩余参数

展开运算符

展开运算法(...)将一个数组进行展开

说明不会修改原数组

主要求数组的最大值和合并数组

箭头函数

目的,引入箭头函数是更简单的函数写法,并且不绑定this,箭头函数的写法,比函数表达式更加的简洁

使用场景:箭头函数更加适用于那些本来需要匿名函数的地方

fn(c参数)=>{}只有一个形参可以省略小括号,只有一行代码可以省略大括号,return

箭头函数,可以直接返回一个对象

箭头函数,没有this去找上一级

解构赋值

数组解构

将单元值,快速批量赋值给一系列变量的简洁语法

const arr【max,min,avg】=[a,b,c]

js里面必须加分号的情况

立即执行函数

使用数组的情况

对象解构

将对象里面的对象属性和方法快速赋值给一系列对象的简洁语法

赋值运算符 =左侧{}用于批量生明变量,右面对象的属性值,将会赋值给左面变量

多级对象解构

const {name,family:{mother,brother,sister}}=pig

遍历数组foreach遍历数组中的每一个元素

arr.foreach{function(item,index)

}

foreach不返回值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值