值傳遞
JavaScript值傳遞的數據類型:字符串(String)、數字(Number)、布爾(Boolean)、空(Null)、未定義(Undefined),
這五種數據類型是按值訪問的,由於能夠直接操做保存在變量中的實際值,JavaScript值傳遞的數據類型保存在棧內存中。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script type="text/javascript">
var a = 10;
var b = a;
document.write(b); //輸出10
a = 12; //變量從新賦值
document.write(b); //輸出10 說明a變量的改變未影響到b(值傳遞)
</script>
</head>
<body>
</body>
引用傳遞
JavaScript引用傳遞的數據類型:數組(Array)、對象(Object)、函數(Function())。JavaScript的引用數據類型是保存在堆內存中的對象。
你不能夠直接訪問堆內存空間中的位置和操做堆內存空間。只能操做對象在棧內存中的引用地址。因此,引用類型數據在棧內存中保存的實際上
是對象在堆內存中的引用地址。經過這個引用地址能夠快速查找到保存中堆內存中的對象。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script type="text/javascript">
var array1 = [10,20,30];
var array2 = array1;
document.write(array2[1]); //輸出20
array1[1] = 100;
document.write(array2[1]); //輸出100 此處是引用傳遞(經過數組的方式)
</script>
</head>
<body>
</body>
</html>
總結
JavaScript不一樣的數據類型決定不一樣的值傳遞類型。
1)基本類型的變量保存的是變量值,引用類型的變量保存的是內存地址;
2)基本類型長度固定,在內存中佔據固定大小的空間,數據存放在棧內存中;引用類型能夠給對象添加屬性和方法,長度不固定,數據存放在堆內存中。
引用類型的存儲須要棧區和堆區(堆區是指內存裏的堆內存)共同完成,棧區內存保存變量標識符和指向堆內存中該對象的指針,也能夠說是該對象在堆內存的地址;
3)基本類型在賦值的時候拷貝值,引用類型在賦值的時候只拷貝地址,不拷貝值。