JS面试题基础(1)超清晰版

目录

函数执行

发现函数 js引擎在内存的操作

作用域链

变量环境和变量记录

内存管理


函数执行

发现函数 js引擎在内存的操作

1、编译时,发现函数,会创建一个全局对象,生成一个属性
2、创建一个函数对象(内存中开辟的空间,会有一个地址),包含父级作用域和函数执行体 3、在全局对象中属性的值是函数的内存地址
4、执行时,根据全局对象中获取到函数的内存地址,直接通过地址找到其函数对象 5、在调用栈会自动创建一个函数执行上下文(里面包含AO) ,在调用栈进行调用函数对象

AO:活跃对象,在函数执行之前会创建AO对象,会把函数接收的变量和形参等提升到AO对象中,

6、开始执行函数,接收传来的值并给形参赋上
7、一旦函数执行完函数执行上下文就会移除并被销毁(再次调用时,再重新走一遍步骤)

作用域链

函数的父级作用域和定义位置(编译时)有关系,与调用位置(执行时)无关

变量环境和变量记录

早期的版本中,在对代码编译时,会将定义的函数和变量添加到VO对象里。但现在改名为变量环境了,而添加在变量环境中的叫做环境记录

内存管理

定义

不管什么编程语言都会在代码执行过程中给他分配内存,有些手动管理内存(c、c++),有些自动管理内存(java、javaScript、python、Swit)

内存管理生命周期

1.内存分配
2.内存使用
3.内存回收
注:全局变量一般不回收(关闭页面时回收)
一般情况下局部变量的值不用了就自动回收掉

内存分配方式

对于基本数据类型会在执行时,直接放在栈区进行分配
对于复杂数据类型会在堆区开辟一块空间,并这块空间的指针返回值变量引用

内存泄露

定义:不在用到的内存,没及时释放

垃圾回收机制

GC,js中内存的分配和回收都是自动完成的,内存在不适用的时候会被垃圾回收机制回收

垃圾回收的算法

引用计数:就是看一个对象是否有指向它的引用

 当一个对象有一个引用指向它时,这个对象的引用+1,当一个对象的引用为0时,就会被销毁
 弊端:会产生循环引用( 两个对象互相引用) 导致大量得内存泄漏

标记清除法

从根部(在js中就是全局对象)出发定时扫描内存中的对象。凡是能从根部到达的对象,都是还需要使用的,无法到达的就被标记为不在使用,稍后进行回收

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值