**
該篇文章是個人看教學視頻之後總結的
**
-
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;
- 棧內存釋放:函數執行完,形成的執行上下文中(執行環境),沒有東西被上下文(環境)意外的東西佔用,此上下文就會從執行環境棧中移除(釋放);如果有佔用,則壓縮到棧的底部(沒有釋放
=> 閉包)
整理不易,希望看到的朋友幫忙點個贊,有什麼問題也可以一起交流討論。有什麼不對的希望您在下方留言,幫忙指出錯誤