JavaScript的參數(shù)傳遞

一、前言

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

二、基本數(shù)據(jù)類(lèi)型

在向函數(shù)傳遞基本數(shù)據(jù)類(lèi)型的時(shí)候,被傳遞的值會(huì)被復(fù)制給一個(gè)局部變量(arguments對(duì)象的一個(gè)元素)。
<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>

三、引用數(shù)據(jù)類(lèi)型

在向函數(shù)傳遞引用數(shù)據(jù)類(lèi)型的時(shí)候,會(huì)把這個(gè)值的內(nèi)存地址復(fù)制給一個(gè)局部變量。所以局部變量的變化會(huì)反映到函數(shù)外部。
<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'; //其實(shí)已經(jīng)不是傳入的內(nèi)存地址
};

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容