自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

JavaScript變量的內(nèi)存分配,你了解多少?

開(kāi)發(fā) 前端
JavaScript的所有變量(包括函數(shù))在整個(gè)處理過(guò)程中都是存放在內(nèi)存中,所以要對(duì)一個(gè)變量進(jìn)行處理。首先得為變量分配內(nèi)存。JavaScript內(nèi)存分配和其他語(yǔ)言一樣,是根據(jù)變量的數(shù)據(jù)類型來(lái)分配內(nèi)存的,而JavaScript變量的數(shù)據(jù)類型由所賦的值的類型所決定的。

[[347504]]

 JavaScript的所有變量(包括函數(shù))在整個(gè)處理過(guò)程中都是存放在內(nèi)存中,所以要對(duì)一個(gè)變量進(jìn)行處理。首先得為變量分配內(nèi)存。JavaScript內(nèi)存分配和其他語(yǔ)言一樣,是根據(jù)變量的數(shù)據(jù)類型來(lái)分配內(nèi)存的,而JavaScript變量的數(shù)據(jù)類型由所賦的值的類型所決定的。JavaScript支持的數(shù)據(jù)類型可分為兩大類:基本數(shù)據(jù)類型和復(fù)雜數(shù)據(jù)類型。其中基本數(shù)據(jù)類型包含了數(shù)字(number)類型、字符串(string)類型、布爾(boolean)類型、未定義(undefined)類型、空(null)類型;復(fù)雜類型包含了對(duì)象(object)類型,在JavaScript中數(shù)組、函數(shù)都屬于對(duì)象類型。除了基本數(shù)據(jù)類型以外的數(shù)據(jù)類型全都是對(duì)象類型。在JavaScript中,基本數(shù)據(jù)類型變量分配在棧內(nèi)存中,其中存放了變量的值,對(duì)其是按值訪問(wèn)的;而對(duì)象類型的變量則同時(shí)會(huì)分配棧內(nèi)存和堆內(nèi)存,其中棧內(nèi)存存放的是地址。堆內(nèi)存存放的是引用的值,棧內(nèi)存存放的地址指向堆內(nèi)存存放的值。對(duì)該變量的訪問(wèn)是按引用來(lái)訪問(wèn)的,即首先讀取到棧內(nèi)存存放的地址,然后按地址找到堆內(nèi)存讀取其中的值。

JavaScript之所以按變量的不同數(shù)據(jù)類型來(lái)分配內(nèi)存,主要原因是棧內(nèi)存比堆內(nèi)存小,而且棧內(nèi)存的大小是固定的,而堆內(nèi)存大小可以動(dòng)態(tài)變化。基本數(shù)據(jù)類型的值的大小固定,對(duì)象類型的值大小不固定,所以將它們分別存放在棧內(nèi)存和堆內(nèi)存是合理的。

  1. function Student (id,sno,name,age){ //函數(shù)定義,Student是一個(gè)函數(shù)變量 
  2.    this.id = id; 
  3.    this.sno = sno; 
  4.    this.name = name
  5.    this.age = age; 
  6. var num = 20; //num  是一個(gè)數(shù)字變量 
  7. var bol = false; //bol 是一個(gè)布爾變量 
  8. var str = "student"; //str 是一個(gè)字符串變量 
  9. var obj = {}; //obj是一個(gè)對(duì)象變量 
  10. var arr = ['a','b']; //arr是一個(gè)數(shù)組變量  
  11. var student = new Studenta(1,"199706010016","maomin",23); //student是一個(gè)對(duì)象變量 

上述代碼中的Student變量定義了一個(gè)構(gòu)造函數(shù),函數(shù)的定義代碼存放在堆內(nèi)存中,該內(nèi)存對(duì)應(yīng)的地址存放在Student函數(shù)變量中。構(gòu)造函數(shù)用于創(chuàng)建對(duì)象實(shí)例,最后一行代碼正是使用了該構(gòu)造函數(shù)來(lái)創(chuàng)建了一個(gè)名字叫maomin的學(xué)生對(duì)象實(shí)例。學(xué)生實(shí)例創(chuàng)建完后會(huì)返回其在堆內(nèi)存中分配的地址,該地址被賦給了student變量。

上述代碼中的{}在堆內(nèi)存中創(chuàng)建了一個(gè)空對(duì)象,該對(duì)象的堆內(nèi)存中的地址被賦給了obj的變量。['a','b']是一個(gè)元素值分別為'a','b'的數(shù)組對(duì)象,該對(duì)象也在堆內(nèi)存中存放,其對(duì)應(yīng)的地址賦給了arr變量。除了Student、obj、arr和student這幾個(gè)變量為對(duì)象變量外,其他幾個(gè)變量num、bol、str都是基本數(shù)據(jù)類型的變量,因而它們都存在棧內(nèi)存中。

基本數(shù)據(jù)類型的變量值存儲(chǔ)在棧內(nèi)存,而對(duì)象類型變量,包括函數(shù)、數(shù)組和對(duì)象,在棧內(nèi)存中存儲(chǔ)的只是引用對(duì)象的地址,該地址為對(duì)象在堆內(nèi)存分配的地址,因而通過(guò)該地址可以找到對(duì)象類型的變量值。

 

責(zé)任編輯:姜華 來(lái)源: 前端歷劫之路
相關(guān)推薦

2022-07-29 09:17:46

JavaScriptReactJS學(xué)習(xí)

2019-08-01 10:44:23

JavaScript框架內(nèi)存

2021-02-25 07:08:30

JavaScript 前端面試題

2015-11-09 10:44:37

DevOpsIT運(yùn)維

2020-03-25 08:47:22

智能邊緣邊緣計(jì)算網(wǎng)絡(luò)

2012-12-27 10:58:24

KVMKVM概念

2023-10-25 08:17:06

Lite模式代理類

2023-10-29 08:35:47

AndroidAOP編程

2021-06-06 18:22:04

PprofGopher邏輯

2023-05-06 08:53:13

2021-04-23 07:27:31

內(nèi)存分配CPU

2012-09-29 09:22:24

.NETGC內(nèi)存分配

2012-09-29 10:29:56

.Net內(nèi)存分配繼承

2019-11-06 09:52:01

JavaScript單線程非阻塞

2022-06-07 07:37:40

線程進(jìn)程開(kāi)發(fā)

2011-08-23 11:03:35

ATM

2023-09-07 10:26:50

接口測(cè)試自動(dòng)化測(cè)試

2019-08-07 17:18:18

云計(jì)算云原生函數(shù)

2022-02-08 12:06:12

云計(jì)算

2025-01-16 10:41:40

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)