前端面试题
6.浏览器垃圾回收机制
js引擎会对运行中的程序使用的数据进行扫描,如果出现没有在使用的数据,那么垃圾回收程序会销毁这些数据,释放他们占用的内存。
1. 垃圾回收机制什么时候运行(不用记)
IE6的时候,如果声明的变量超过256个,字符串占用的内存大小超过64k,使用的对象超过个4096时,垃圾回收程序就会运行,它开始扫描 程序使用的变量,回收其中没有在使用的变量(释放它们占用的内存空间)。chrome等浏览器对这个阈值放大了一倍处理,在某次回收后, 看回收的变量占总变量比例,如果这个比例超过85%,说明需要清理工作,那么此时应该降低垃圾回收的阈值,将其缩小一倍;如果这个比例 小于15%,说明不需要清理工作,那么就将垃圾回收的阈值调大一倍。
2. 垃圾回收机制怎么知道一个数据该释放占用的内存了(记住)
1. 引用计数,js引擎会计算一个变量被使用的次数,当它的使用次数为0时,在下次垃圾回收程序运行时就清理这个变量,但是这种方案有 一个问题,无法清除循环引用的变量
2. 标记清除,从全局变量开始,对每个变量进行标记,第一次来一波标记。下次垃圾回收程序运行,对此时程序的每个变量再进行一波标 记,比对两次标记中的变化。如果上次的变量在这次标记中没有使用了,此时就清理掉。
5.js语言的组成
1. javascript = BOM (browser object model) + dom (document object model) + ecmascript(js的核心标准语言)
2. Node.js = ecmascript + commonjs规范定义的各模块(buffer + tcp + http + fs + module + package + ...)
3. w3c组织 制定 BOM + DOM的各种规范
4. 变量提升是怎么回事
1.当前作用域下,js代码执行前,浏览器会把var和function函数提升到当前作用域最前面。
2.变量预解析会把变量的声明提升到当前作用域最上面,只提升var声明,不提升赋值。
3.函数预解析会把函数的声明提升到当前作用域对上吗,但不会调用函数。
3.函数传参数时基本类型和引用类型有什么不一样
引用类型:值是保存在内存对象中,不允许直接操作内存
基本类型:按值访问 直接操作保存在变量中的值
2.this 指向问题
1.普通函数,定时器,和立即执行函指向window
2.对象的方法指向 该方法所属对象
3. 构造函数 指向实例对象
4. 绑定时间函数 指向绑定事件对象
1.js的作用域
全局作用域 :在页面打开时被创建,页面关闭时被销毁
函数作用域: 调用函数时,函数作用域被创建,函数执行完毕,函数作用域被销毁