軟體測試學習教程——WEB測試之JS記憶體
WEB測試之JS記憶體
Js的記憶體
執行環境及作用域
執行環境定義了變數或函式有權訪問的其他資料,決定了它們各自的行為。
全域性執行環境是最外圍的執行環境。在Web瀏覽器中,全域性執行環境被認為是window物件。因此所有的全域性變數和函式都是作為window物件的屬性和方法建立的。
var box='blue';
function setBox(){
alert(box);
}
setBox();
全域性的變數和函式,都是window物件的屬性和方法。
var box='blue';
function setBox(){
alert(window.box);
}
window.setBox();
當執行環境中的所有程式碼執行完畢後,該環境被銷燬,儲存在其中的所有變數和函式定義也隨之銷燬。如果是全域性環境下,需要程式執行完畢,或者網頁被關閉才會銷燬。
PS:每個執行環境都有一個與之關聯的變數物件,就好比全域性的window可以呼叫變數和屬性一樣。區域性的環境也有一個類似window的變數物件,環境中定義的所有變數和函式都儲存在這個物件中。(我們無法訪問這個變數物件,但解析器會處理資料時後臺使用它)
函式里的區域性作用域裡的變數替換全域性變數,但作用域僅限在函式體內這個區域性環境。
var box='blue';
function setBox(){
varbox='red';
alert(box);
}
setBox();
alert(box);
透過傳參,可以替換函式體內的區域性變數,但作用域僅限在函式體內這個區域性環境。
var box='blue';
function setBox(box){
alert(box);
}
setBox('red');
alert(box);
函式體內還包含著函式,只有這個函式才可以訪問內一層的函式。
var box='blue';
function setBox(){
functionsetColor(){
var b='orange';
alert(box);
alert(b);
}
setColor();
}
setBox();
每個函式被呼叫時都會建立自己的執行環境。當執行到這個函式時,函式的環境就會被推到環境棧中去執行,而執行後又在環境棧中彈出(退出),把控制權交給上一級的執行環境。
PS:當程式碼在一個環境中執行時,就會形成一種叫做作用域鏈的東西。它的用途是保證對執行環境中有訪問許可權的變數和函式進行有序訪問。作用域鏈的前端,就是執行環境的變數物件。
沒有塊級作用域
塊級作用域表示諸如if語句等有花括號封閉的程式碼塊,所以,支援條件判斷來定義變數。
if(true){
varbox='zhang';
}
alert(box);
for迴圈語句也是如此
for(var i=0;i<10;i++){
varbox='Lee';
}
alert(i);
alert(box);
var關鍵字在函式里的區別
function box(num1,num2){
varsum=num1+num2;
returnsum;
}
alert(box(10,10));
alert(sum);
一般確定變數都是透過搜尋來確定該識別符號實際代表什麼。
var box='blue';
function getBox(){
returnbox;
}
alert(getBox());
記憶體問題
JavaScript具有自動垃圾收集機制,執行環境會負責管理程式碼執行過程中使用的記憶體。其他語言比如C和C++,必須手工跟蹤記憶體使用情況,適時的釋放,否則會造成很多問題。而JavaScript則不需要這樣,它會自行管理記憶體分配及無用記憶體的回收。
JavaScript最常用的垃圾收集方式是標記清除。垃圾收集器會在執行的時候給儲存在記憶體中的變數加上標記。然後,它會去掉環境中正在使用變數的標記,而沒有被去掉標記的變數將被視為準備刪除的變數。最後,垃圾收集器完成記憶體清理工作,銷燬那些帶標記的值並回收他們所佔用的記憶體空間。
垃圾收集器是週期性執行的,這樣會導致整個程式的效能問題。比如IE7以前的版本,它的垃圾收集器是根據記憶體分配量執行的,比如256個變數就開始執行垃圾收集器,這樣,就不得不頻繁地執行,從而降低的效能。
一般來說,確保佔用最少的記憶體可以讓頁面獲得更好的效能。那麼最佳化記憶體的最佳方案,就是一旦資料不再有用,那麼將其設定為null來釋放引用,這個做法叫做解除引用。這一做法適用於大多數全域性變數和全域性物件。
var o={
name:‘zhang’
};
o=null;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69914734/viewspace-2656718/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 軟體測試學習教程—Web測試之正規表示式Web
- 軟體測試學習教程—軟體測試質量
- 軟體測試學習教程—軟體測試基本知識
- 軟體測試學習教程—迴歸測試
- 軟體測試學習教程—軟體測試基礎理論五
- 軟體測試學習教程—軟體測試基礎理論六
- 軟體測試學習教程—軟體測試基礎理論四
- 軟體測試學習教程—軟體測試基礎理論三
- 軟體測試學習教程——過載new或delete來檢測記憶體洩漏delete記憶體
- 軟體測試學習教程——LoadRunner實現介面測試
- 【軟體測試】學習筆記筆記
- 軟體測試學習教程——JDBC配置JDBC
- 軟體測試學習 ——五種軟體測試模型模型
- 軟體測試培訓教程:軟體測試面試之怎麼測試刷抖音?面試
- 軟體測試學習教程——JDBC開發JDBC
- 軟體測試學習教程——JDBC介紹JDBC
- 軟體測試教程之手機軟體測試方法
- 軟體測試整理學習
- 學習旅途(軟體測試)
- 軟體測試學習教程—JavaScript內建物件JavaScript物件
- 軟體測試學習網站有哪些?怎麼學軟體測試呢?學習網站
- 軟體測試培訓分享:學習能力差可以學習軟體測試嗎
- 【分享】—如何學習軟體測試
- 軟體測試學習路線
- 軟體測試之Web測試如何進行?廣東好口碑軟體測評公司推薦Web
- 軟體測試學習教程—Jmeter元件介紹(二)JMeter元件
- 軟體測試學習教程——【大蟒蛇】python基礎Python
- 軟體測試學習——移動端功能測試分析
- 遊戲記憶體測試遊戲記憶體
- 軟體測試之測試分類_1.4
- 軟體測試之易用性測試
- 2020版軟體測試全新4.0教程震撼來襲,不一樣的軟體測試學習路
- 軟體測試書籍-學軟體測試最好的書
- 軟體測試學習教程——HP Loadrunner12.50安裝教程
- 軟體測試之Web測試知識分享,權威的軟體測評機構如何收費?Web
- 軟體測試要學什麼(1)黑盒測試詳解教程
- 軟體測試學習教程——Python實現反射機制Python反射
- 軟體測試學習教程——Python SMTP傳送郵件Python