**
该篇文章是个人看教学视频之后总结的
**
-
1.首先看几道题:
百度面试题:
let a = 12;
let b =a;
b = 13;
console.log(a);//12
let a = {n:12};
let b = a;
b["n"] = 13;
console.log(a.n);//13
let a = {n:12};
let b =a;
console.log(b.n);//12
b = {n:13};
console.log(b.n);//13
console.log(a.n);//12
您能答出来吗?
思路:
1.首先打开浏览器时,浏览器会开辟一个Ecstack(执行环境栈)栈内存(stack)
2.接着产生一个EC(global) 全局执行上下文(全局执行环境)
3.在全局执行环境中,声明一个 VO(global)环境变量 。
存储方式如下图:
第一个:
第二个:
第三个:
没看懂图的可以在下方留言或者私信,我给大家解释。
- 2.数据类型转换
腾讯面试题:
let result=1+null+true+undefined+"tyt"+false+[]+undefined+null;
console.log(result);// NaNtytfalse[]undefinednull
思路:没有遇到字符串就转为数字,
1+ null转为0
1+ true 转为1
2 + undefined 结果为NaN
遇到字符串 全按字符串操作来做
- 3.数值比较
JS中 = = 比较规则
对象 = = 对象 比较地址
对象 = = 字符串 对象变为字符串
NaN = = NaN NaN和他自己以及其他值都不等
null = = undefined ==时为true === 为false 并且和其他任何值都不等
剩下的只要两个类型不同,最后都转化为数字
例子如下:
console.log([]==false); //true
console.log(![]==false); //true
不清楚可点开这个链接作为参考https://www.jianshu.com/p/2c83eb413e81
-
4.为什么typeof null 返回object?
null 在存储时为000, 000被认为是对象类型
1 整型
100 字符串
110 布尔类型 -
5.内存回收机制
标记清除法:谷歌
周期性的对变量进行检测,对不再使用的变量进行标记,在周期过后进行清除。
引用清除法:IE
变量引用一次就给变量引用+1,不引用就-1,直到变量引用为0;(弊端,很多情况下,数字不是很准确,导致很多应该被清除的没有被清除, => 内存泄漏)
- 堆内存释放: 变量 = null;
- 栈内存释放:函数执行完,形成的执行上下文中(执行环境),没有东西被上下文(环境)意外的东西占用,此上下文就会从执行环境栈中移除(释放);如果有占用,则压缩到栈的底部(没有释放
=> 闭包)
整理不易,希望看到的朋友帮忙点个赞,有什么问题也可以一起交流讨论。有什么不对的希望您在下方留言,帮忙指出错误