javascript函数传参是传值还是传引用?
大家讲道理
大家讲道理 2017-04-11 11:30:31
[JavaScript讨论组]
function changeStuff(num, obj1, obj2)
{
    num = num * 10;
    obj1.item = "changed";
    obj2 = {item: "changed"};
}

var num = 10;
var obj1 = {item: "unchanged"};
var obj2 = {item: "unchanged"};
changeStuff(num, obj1, obj2);
console.log(num);   // 10
console.log(obj1.item);    // changed
console.log(obj2.item);    // unchanged

为什么是这个情况?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(8)
ringa_lee

js所有的传递都是值传递

怪我咯

JavaScript中所有参数的传递均是值传递

  • 第一个输出: 这个函数对变量num唯一的操作,就是将他的赋给了num参数.你的函数只是对参数操作,而没有对变量操作.如果是引用传递,那么num的值应该为100.然而并没有

  • 第二个输出: obj1.item = "changed";更改了obj1的item属性.而obj2 = {item: "changed"}又对参数赋值了另一个新创建的对象,所以你的函数并没有对obj2对象进行任何操作.之所以是这样的原因,正好说明了参数的值传递.
    详细原因见<JavaScript高级程序设计>

PHP中文网

js高程上面有详细讲,js函数都是按值传递参数的。

PHP中文网

旧答案错了。刚看了下js高程,里面说的很清楚是传值得额。。

巴扎黑

js中的所有参数传递都是传值,但是这个传值你要理解的一点是:基本数据类型的传值是指的复制值,引用类型传值指的是地址传递,为什么会传递地址呢?因为保存在栈中的变量保存的是地址,所以它传递的肯定是地址。

迷茫

基本类型是传值,引用类型是传址

黄舟

无耻的贴一篇自己的文章,是根据《js高程》自己总结的,看2.传递参数

巴扎黑

终于搞明白了,是call by shareing.就是分享,共享,共享值,共享地址,一切都豁然开朗了

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号