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 href="http://blog.51yuekan.com/2014/11/24/2014-08-02-javascript-arguments/">http://blog.51yuekan.com/2014/11/24/2014-08-02-javascript-arguments/</a>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ECMAScript 中所有函数的参数都是按值传递的。也就是说,把函数外部的值复制给函数内部的参数,就和把值从一...
    封清扬阅读 1,220评论 0 0
  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 12,392评论 2 17
  • 单例模式 适用场景:可能会在场景中使用到对象,但只有一个实例,加载时并不主动创建,需要时才创建 最常见的单例模式,...
    Obeing阅读 6,481评论 1 10
  • 写在最前 本次尝试通过流程图的形式并结合两个例子来重新理解一下JavaScript中的参数传递。 欢迎关注我的博客...
    Annnnnn阅读 1,859评论 0 2
  • 三、闭包和高阶函数 3.1 闭包 3.1.1 变量的作用域 所谓变量的作用域,就是变量的有效范围。通过作用域的划分...
    梁同学de自言自语阅读 5,341评论 0 6

友情链接更多精彩内容