函数传递 - JavaScript中函数的参数传递方式都是按值传递
PHP中文网
PHP中文网 2017-04-10 15:40:36
[JavaScript讨论组]

函数传递方式

JavaScript中函数的参数传递方式都是按值传递,没有按引用传递,应该怎么理解??

“能不能举个例子”

补充:保存引用的对象(比如数组,它是按照引用传递的又该怎么理解)

function add(arr,num){
    for(var i=0; i
PHP中文网
PHP中文网

认证0级讲师

全部回复(5)
伊谢尔伦

javascript中的参数传递都采用 按值传递的方式
对于对象来说,这个值是指对象的内存地址
对基本类型,这个值是原始值

=======

function add(arr,num){
    console.log(arr);//[1,2,3,4,5];
    //arr被重新赋值前和arr1的相同
    arr=[5,6,7,8,9];//arr被重新赋值,指向的地址不同,但不会影响arr1的指向,也就是其地址信息
    for(var i=0; i<arr.length; i++){
        arr[i]+= num;
    }
    console.log(arr);//[10, 11, 12, 13, 14]
}
var arr1 =[1,2,3,4,5];
add(arr1,5);
console.log(arr1);//[1, 2, 3, 4, 5]
怪我咯

1、按值传递:
按值传递就是将变量先复制一份,然后将复制的变量传入函数,如下面函数,先将num复制,然后再将复制的值传入add函数,执行下面函数就很明了了。
var num=10;
function add(num){
num+=10;
return num;
}
console.log("这是add方法返回的值 "+add(num));//这是add方法返回的值 20
console.log("这是原始的num "+num);//这是原始的num 10
2、按引用传递
按引用传递思想和按值传递一样,先将对象的引用复制一份,然后再将所复制的引用传入函数;不同的是,这两个引用都指向同一个对象。来看一下面的一段代码:
function person(){
this.name="小明";
this.age=23;
}
p1=new person();
p2=new person();
function editName(person){
person.name="小红";
}
console.log(p1.name);//小明
editName(p1);
console.log(p1.name);//小红
注意:不是说可以改变对象的值就是说明是按引用传递,例如以下代码:
function chengeName(p){
p=new person();
p.name="小小";
}
p2=new person();
console.log(p2.name);//小明
chengeName(p2);
console.log(p2.name);//小明
这里p2的name虽然没有改变,但它也是属于按引用传递的

巴扎黑

js中函数参数都是按值传递的,即使函数局部改变引起了全局的改变。javascript高级程序设计里是这么说的,可是js里对象哪里有值传递啊。。。
直接传值的话,又哪来的深复制浅复制啊。搞不懂了
function setName(obj) {
obj.name = 'obj';
obj = new Object();
obj.name = 'obj2';
}

var person = new Object();
setName(person);
console.log(person.name);//obj

黄舟

把引用类型的变量想成一堆指针,就是全按值传递。

ringa_lee
    var foo = {
        bar: function() { return this.baz; },
        baz: 1
    };

    (function(){
        return typeof arguments[0]();//"undefined"
    })(foo.bar);

你看这个例子,如果是传递引用,那么foo.bar应该会被当作函数传进去,后面的typeof就不会是undefined了。对吧。

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

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