前一天提升章節中有提到,在執行環境中,會創造函式與變數的記憶體空間,但若這些記憶體一直不釋放,會造成記憶體滿載或導致效能變差等問題,所以要適時地釋放記憶體空間,所以下面來了解關於 JavaScript 記憶體的存放與釋放
在執行函式時會產生執行環境,而執行環境是一層一層建立並堆疊執行,當運作完成則會一層一層離開,而當執行環境一層一層離開,同時也會釋放記憶體空間,最後僅留下全域執行環境所佔用的記憶體。
JavaScript 在大部分情況下採用 回收機制
來決定記憶體是否要回收,當一個物件,沒有任何物件參考它時,則會被視為記憶體的垃圾,因而被釋放,以下為課程中使用範例:
// 1.創造長字串來佔用記憶體空間
function randomString(length) {
var result = '';
var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
var charactersLength = characters.length;
for (var i = 0; i < length; i++) {
result += characters.charAt(Math.floor(Math.random() * charactersLength));
}
return result;
}
// 2.建立空陣列 data
var data = [];
// 3.建立函式 getData - 將 randomString 產生的長字串放入陣列 data
function getData() {
for (let i = 0; i < 1000; i++) {
data.push(randomString(5000))
}
}
// 4.運行函式 getData
getData();
// 5.顯示陣列 data
console.log(data);
// 1.創造長字串來佔用記憶體空間
function randomString(length) {
var result = '';
var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
var charactersLength = characters.length;
for (var i = 0; i < length; i++) {
result += characters.charAt(Math.floor(Math.random() * charactersLength));
}
return result;
}
// 2.建立函式 getData
function getData() {
// 2-1.在函式內建立空陣列 data
var demoData = [];
// 2-2.將 randomString 產生的長字串放入陣列 data
for (var i = 0; i < 1000; i++) {
demoData.push(randomString(5000))
}
// 2-3.顯示陣列 data
console.log(demoData);
// 注意:Chrome console 中的行為也會需要記憶體
}
// 3.運行函式 getData
getData();
先上傳,撰寫中ing