在ecmascript中,變數可以存放兩種型別的值
原始值指的是代表原始資料型別的值,例如:undefined null number string boolean引用型別指的是復合型別值,例如:object function array 自定義物件
堆和棧
var num = 10; //變數名num和初始化值10都存放在棧中
var obj = new
object(); //變數名obj存放在棧中,而它指向的object()物件是存放在堆中的
為什麼原始值要放在棧中,引用值要放在堆中?
function
person
(id,name,age)
var num = 10;
var bol = true;
var str = "abc";
var obj = new
object();
var arr = ['a','b','c'];
var person = new person(100,"笨蛋的座右銘",25);
由上圖可以看出,我們不能直接操作堆中的資料,也就是說不能直接操作物件,但我們可以通過棧中存放的變數指標來進行操作
堆比棧大,棧比堆的運算速度快,物件是乙個複雜的結構,並且可以自由擴充套件,如:陣列可以無限擴充,物件可以自由新增屬性。將他們放在堆中是為了不影響棧的效率。而是通過引用的方式查詢到堆中的實際物件再進行操作。相對於簡單資料型別而言,簡單資料型別就比較穩定,並且它只佔據很小的記憶體。不將簡單資料型別放在堆是因為通過引用到堆中查詢實際物件是要花費時間的,而這個綜合成本遠大於直接從棧中取得實際值的成本。所以簡單資料型別的值直接存放在棧中
總結
javascript記憶體洩漏
網搜結果 1 迴圈引用 circular references ie瀏覽器的com元件產生的物件例項和網頁指令碼引擎產生的物件例項相互引用,就會造成記憶體洩漏。這也是web頁面中我們遇到的最常見和主要的洩漏方式 舉例 dom物件與js物件相互引用。範例 function encapsulator e...
javascript 常用方法日常總結01
pub 清空表單 傳入值為表單的id pub.clearform function id 關閉window 傳入值為window的id pub.closewindow function id pub.setpaginationattr function gridid 條記錄 共 條記錄 before...
iOS 記憶體管理 01
一 概述 內部管理簡單來說就是計算機內部儲存的管理,我們從馮 諾依曼結構說起,馮 諾依曼結構指出了計算機由運算器 控制器 儲存器 輸入和輸出裝置幾大部件組成。拿 iphone 8 舉例來說,運算器和控制器合在一起就是 cpu 處理器 執行記憶體為 3gb lpddr4 ram。而 64g 256g ...