JS中的資料型別及堆疊記憶體

2021-10-21 10:59:46 字數 2615 閱讀 5277

敲了這麼多年**,發現自己對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.儲存引用型別的值的 物件 鍵值對 函式 字串 當前堆記憶體釋放銷毀,那麼這個引用值徹底沒了 堆記憶體...