JavaScript的參數傳遞

一、前言

ECMA中所有函數的參數都是按照值傳遞。

二、基本數據類型

在向函數傳遞基本數據類型的時候,被傳遞的值會被復制給一個局部變量(arguments對象的一個元素)。
<pre>
<code>
function test( x ) {
x = 10; //第一次賦值
console.log( 'x1 : ' + x );
console.log( 'arguments1 : ' + arguments )
console.log( 'arguments[0]1 : ' + arguments[0] )

arguments[0] = 100;

console.log( 'x2 : ' + x );    
console.log( 'arguments2 : ' + arguments )
console.log( 'arguments[0]2 : ' + arguments[0] )

};

test(5);
</code>
</pre>

<pre>
<code>
function test( num ) {
num = num + 10;
return num;
};

var num = 20;
var result = test( num );
console.log( 'num : ' + num );
console.log( 'result : ' + result );
</code>
</pre>

三、引用數據類型

在向函數傳遞引用數據類型的時候,會把這個值的內存地址復制給一個局部變量。所以局部變量的變化會反映到函數外部。
<pre>
<code>
function setName( obj ) {
obj.name = '盧林';
};

var lou = new Object();
window.setName( lou );
console.log( lou.name );

function setName( obj ) {
obj.name = '盧林';
//重新new
obj = new Object();
obj.name = 'others'; //其實已經不是傳入的內存地址
};

var lou = new Object();
window.setName( lou );
console.log( lou.name );
</code>
</pre>
其實原理很簡單,引用類型傳入的是內存地址的值(當然JavaScript操作內存地址),比如是8bit,內存地址是:1100 1010,指向的內容是person對象。所以你修改了name屬性會影響到函數外部。

原文鏈接:<a >http://blog.51yuekan.com/2014/11/24/2014-08-02-javascript-arguments/</a>

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • ECMAScript 中所有函數的參數都是按值傳遞的。也就是說,把函數外部的值復制給函數內部的參數,就和把值從一...
    封清揚閱讀 147評論 0 0
  • 工廠模式類似于現實生活中的工廠可以產生大量相似的商品,去做同樣的事情,實現同樣的效果;這時候需要使用工廠模式。簡單...
    舟漁行舟閱讀 7,827評論 2 17
  • 單例模式 適用場景:可能會在場景中使用到對象,但只有一個實例,加載時并不主動創建,需要時才創建 最常見的單例模式,...
    Obeing閱讀 2,097評論 1 10
  • 寫在最前 本次嘗試通過流程圖的形式并結合兩個例子來重新理解一下JavaScript中的參數傳遞。 歡迎關注我的博客...
    Annnnnn閱讀 271評論 0 2
  • 三、閉包和高階函數 3.1 閉包 3.1.1 變量的作用域 所謂變量的作用域,就是變量的有效范圍。通過作用域的劃分...
    梁同學de自言自語閱讀 1,490評論 0 6