Web基本筆記~11.函數和內存問題

Web基本筆記~11.函數和內存問題

上一期

函數

       函數對任何語言來說都是一個核心的概念。通過函數可以封裝任意多條語句,而且可以在任何地方、任何時候調用執行。JavaScript中的函數使用function關鍵字來聲明,後跟一組參數以及函數體。

       理解函數最簡單的辦法就是拿數學裏的函數作爲例子,就比如y = f(x * 2)這個函數,當x的值爲3的時候,y就是6, x 爲 5的時候 y就是10。

JavaScript函數案例
function f (x){
   
   
	return x * 2;
}
var y = f(3);
console.log(y); //6

       這段代碼的含義就相當於數學裏面的 y = f(x * 2)這個函數。

       return 可以把值給返回,f (x)裏面的x是參數,可有可無,也可以有多個。return 也是可有可無。

onclick事件

       在JavaScript裏面有一種機制叫做事件機制,這個會在後面經常用到。今天提前學習其中的onclick事件。

       在HTML的按鈕標籤加上onclick事件之後,就會觸發函數。

<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script>
			function retu(){
    
    
				alert("返回");
			}
			
			function del(){
    
    
				confirm("您是否要刪除?");
			}
			
			function repla(){
    
    
				prompt("請輸入新密碼!");
			}
		</script>
	</head>
	<body>
		<button onclick="retu()">返回</button>
		<button onclick="del()">刪除</button>
		<button onclick="repla()">修改密碼</button>
	</body>
</html>

垃圾收集

       JavaScript具有自動垃圾收集機制,也就是說執行環境會負責管理代碼執行過程中使用的內存。而在C和C++之類的語言中,開發人員的基本任務就是手工跟蹤內存的使用情況,這樣很容易造成許多問題。這個垃圾收集器的工作原理也很簡單,其實就是找到那些不用的變量,然後釋放掉它的內存。不需要像C++一樣還要去delete。

       當我們在一個函數中定義了一個局部變量,那麼這個局部變量會在該函數執行的過程中存在。而這個過程中會爲該局部變量在棧(或者堆)的內存上分配相應的空間以便存儲他們的值。直到函數要執行結束了,這個時候局部變量就沒有存在的必要,然後就會釋放他們供內存使用。

標記清除

       JavaScript中最常見的垃圾清理方式是標記清除。當變量進入環境的時候會將這個變量標記爲進入環境,當變量要離開的時候會被標記成離開環境。垃圾收集器會在運行的時候給存儲在內存中的所有變量都加上標記,然後它會去掉環境中的變量以及被環境中的變量引用的變量標記。而在此之後再被加上標記的變量就會被視爲準備刪除的變量,原因是環境中的變量已經無法訪問這些變量了。最後垃圾收集器完成內存清除的工作。銷燬那些帶標記的值並收回他們所佔用的內存空間。

管理內存

       雖然JavaScript已經具有了垃圾收集機制,但是在內存管理和垃圾收集面臨的問題還是有點與衆不同。最常見的問題就是分配給Web瀏覽器的可用內存數量通常要比分給桌面的要少。這樣做的目的主要是爲了防止運行JavaScript的網頁耗盡全部系統內存而導致系統崩潰。內存限制問題不僅會影響給變量分配內存,同時還會影響調用棧以及在一個線程中能夠同時執行的語句數量。所以說我們要確保佔用最少的內存給瀏覽器最好的性能。

       如果說一個數據已經不再有用了,則可以把他置爲Null來釋放這個引用。通常稱之爲解除引用。

  function fun(name){
   
   
	   var obj = new Object();
	   obj.name = name;
	   return obj;
   }
   var local = fun("hello world");
   alert(local);
   //手工解除引用
   local = null;

       不過,這種做法並不意味着自動回收該值所佔用的內存。解除引用的真正作用是讓值脫離執行環境,方便垃圾收集器下次執行的時候將其回收。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章