敲了這麼多年**,發現自己對js基礎知識掌握還是不太牢固,文件積累的能力還很弱,所以從今天開始,複習和總結js基礎知識,並以文章的形式記錄,督促自己進步。
首先第一篇,總結 js 中的資料型別和堆疊記憶體
1.資料型別
基本資料型別:string,number,boolean,null,undefined
引用資料型別:
object:物件包含 普通物件{},陣列,math物件,日期物件,正則物件等...
function
以及es6新增的 symbol 唯一值
基本資料型別指向棧記憶體,引用資料型別指向堆記憶體
物件的屬性名不能是引用資料型別的值,如果是,將會做tostring處理
let a = ;
let b = function fn()
let obj = ;
obj[a] = 1000;
obj[b] = 2000;
console.log(obj) // ": 2000}
2.堆疊記憶體go/vo/ao/ec及作用域和執行上下文ecstack:execution context stack 執行環境棧ec: execution context 執行上下文
vo varibale object 變數物件
ao:activation object 活動物件 (函式的叫做ao,理解為vo的乙個分支)
go global object:全域性變數物件
scope:作用域,建立的函式的時候就賦予的
scope chain :作用域鏈
let x = 1;
function a(y)
return b;
}let c = a(2);
c(3);
/*這段**的執行過程為:
ecstack = [
//第一步:建立執行上下文,並將其壓入 ecstack 中
ec(g) =
a[scope] = vo(g) //函式a建立時,就確定了其作用域為 全域性變數物件vo(g)}}
//第二步:建立函式a的執行上下文,執行函式a(2)
ec(a) = ,
b[[scope]] = ao(a);
this:window;}},
//第三步:建立函式b的執行上下文
ec(b) =
},] */
//例子2:
let x = 5;
function fn(x)
}let f = fn(6);
f(7);
fn(8)(9);
f(10);
console.log(x);
/*輸出 14 18 18 5
fn中的x 被全域性變數f引用,一直沒有被釋放,形成了閉包,
執行時f(7)時,fn中的x是傳過來的6, f(7) => 7+(++6) = 14 //此時,fn中的x值已經變成 7
執行fn(8)(9)時,=> 9+(++8) = 18
執行f(10)時,=> 10+(++7) => 18
最後列印x,是全域性變數的x ,所以等於 5 */
關於堆疊記憶體的更多例子
let a = 12;
let b = a; //建立變數b,將a的值賦給b,因為a的值是基本資料型別,所以,a和b 在棧記憶體中,是互不影響的兩個變數
b = 13; //此時 b 的值改為13,最終 a=12 b=13
console.log(a);
let a = ;
let b = a; //b和a指向同乙個堆記憶體位址
b['n'] = 13; //改變b就是改變a 所以 a.n = 13
console.log(a.n);
let a = ;
let b = a;
b = ; //此處 b 重新賦值了,建立了乙個新的記憶體位址 所以a.n還是等於12
console.log(a.n);
let a = 12;
let b = a;
b = 13;
console.log(a); //12
let a = ;
let b = a;
b['n'] = 13;
console.log(a.n); //13
let a = ;
let b = a;
b = ;
console.log(a.n); //12
/*阿里面試題*/
let a = ;
let b = a;
b.m = b = ;
console.log(a); // m: n: 10
console.log(b); //
/*360面試題*/
let x = [12, 23];
function fn(y)
fn(x);
console.log(x); //[100,23]
JS中的資料型別及檢測
基本資料型別 值型別 number 數字 string 字串 boolean 布林 null 空物件指標 undefined 未定義 引用資料型別 1 object物件資料型別 普通物件 陣列 katex parse error expected eof got d at position 179 ...
js資料型別及判斷資料型別
1.null 2.undefined 3.boolean 4.number 5.string 6.引用型別 object array function 7.symbol typeof null object typeof undefined undefined typeof true false b...
JS資料渲染機制及堆疊記憶體
1 提供乙個供js自上而下執行的環境 都是在棧中執行的 2 由於基本資料型別值比較簡單,他們都是直接在棧記憶體中開闢乙個位置,把值直接儲存進去的 當棧記憶體被銷毀,儲存的那些基本值也都跟著銷毀了 1.儲存引用型別的值的 物件 鍵值對 函式 字串 當前堆記憶體釋放銷毀,那麼這個引用值徹底沒了 堆記憶體...