美文网首页
JavaScript是按值传参的还是按引用传参的?

JavaScript是按值传参的还是按引用传参的?

作者: AnthonyYY | 来源:发表于2017-04-14 09:53 被阅读38次

先说结论: javascript 是按值传参的

//example one
var name = 'Carl';
function changeName(name){ name = 'Dazzy' };
changeName(name);
console.log(name);// 'Carl';

// example two
var obj = {name: 'Lucy'};
function changeObjName(obj){
    obj.name = 'dazzy';
};
changeObjName(obj);
console.log(obj.name);// 'dazzy';

第一个例子的name的值没有发生变化,这验证了JavaScript是按值传参的说法,但是第二个例子的obj的name属性则发生了变化,貌似是按引用传值的才是对的。但并非如此。这里需要解释下函数在调用时传入的实参都会变成函数内部的局部变量,比如函数有个形参obj,在函数调用时传入实参a, a={name:'carl'},在函数内部相当于发生了 var obj = a;a在外部是一个指向{name: 'carl'}的指针,它有自己的内存空间,obj 被赋值了 a这个指针,其实就是a指针的一个副本,也就是另外一个指针,指向{name: 'carl'} ,所以操作obj就会影响{name:'carl'},但是给obj 重新赋值后,继续操作obj 则不会影响外部那个 {name: 'carl'},所以说JavaScript 函数参数是按值传参的,传参的时候如果传入一个指针,就会生成一个指针副本,就像同一把钥匙被复制了另一把出来。两者本质上使用的是不同的内存空间。传入的如果直接是一个引用各类型,就会生成一个引用类型的指针,也是开辟了一个新的内存空间。因此函数是按值传参的。这样就很好理解javascript是按值传参的概念了。

网上还有一个反证法来证明这个概念:

function setName(person){
    person.name = 'carl';
    person = new Object();
    person.name = 'dazzy';
}

function Person();
var person1 = new Person();
person1.name = 'carl';

setName(person1);

console.log(person1.name);// carl

如果是引用传参的话person1.name的值就应该是dazzy了

相关文章

  • JavaScript是按值传参的还是按引用传参的?

    先说结论: javascript 是按值传参的 //example onevar name = 'Carl';fu...

  • Java按值还是引用传参

    Java的方法参数是按值传递的 基本类型传递的是字面值,引用类型传递的是地址值。也可以理解成,基本类型按值传递,引...

  • JS传参是按值传递还是按引用传递?

    发现对js传参是值传递还是引用传递这个问题的认识不是很清晰,在这里做下探究。 首先要清楚的是,什么是按值传递?什么...

  • Python参数传递,既不是传值也不是传引用

    面试的时候,有没有被问到Python传参是传引用还是传值这种问题?有没有听到过Python传参既不是传值也不是传引...

  • 参数按值传递

    参数如果是基本类型是按值传递,如果是引用类型按共享传递。 1、按值传值 2、共享传值 共享传值: 按引用传递是传...

  • 一张图解决java传值传引用问题

    分析此类问题只需要知道两点:java有两种传参方式,基本类型用传值,包装类型用传引用无论是传值还是传引用,形参都是...

  • 一张图解决java传值传引用问题

    分析此类问题只需要知道两点:java有两种传参方式,基本类型用传值,包装类型用传引用无论是传值还是传引用,形参都是...

  • python函数详解

    函数定义 格式 函数定义实例: 5050 三种传参方式 按位置顺序传参 李诗才 按关键字传参,参数顺序可以任意 李...

  • 函数的参数传递

    按值传递 按值传递:修改形参的值并不会影响实参。但如果传递的是引用类型,形参的值也会影响实参。按引用类型传递:修改...

  • Python的函数返回值返回的是值还是引用?

    关于Python函数传参是传值还是传引用?这一问题网上都有很多的讨论,这篇博客解释比较清楚,结论是:Python参...

网友评论

      本文标题:JavaScript是按值传参的还是按引用传参的?

      本文链接:https://www.haomeiwen.com/subject/jhxhxttx.html