美文网首页
JavaScript中参数传递到底是值传递还是引用传递

JavaScript中参数传递到底是值传递还是引用传递

作者: 陈学谦_ | 来源:发表于2017-04-21 13:33 被阅读131次

本文只是一种生活记录,建议直接看底部结论

今天在看《高程3》的时候说ECMAScript所有参数传递都是值传递,没有引用传递,即使传递的参数是引用类型。

ECMAScript中所有函数的参数都是按值传递的。

怎么去理解这句话很重要。

我当时的理解是,即使传递的参数是引用类型,形参也会自己在堆中单独开辟一块空间存放变量。

往下看的时候我意识到我错了,他所说值传递的意思是变量地址值传递,并且高程上举了一个例子来证明:

function setName(obj) {
  obj.name = "Nicholas";
  obj = new Object();
  obj.name = "Greg";
}

var person = new Object();
setName(person);
alert(person.name); // 输出Nicholas

我就纳闷了,为毛这就能证明参数是值传递的?

那这样算是值传递还是引用传递?

var obj1 = {name: 'zhou'};
var obj2 = obj1;

如果这是引用传递的话,那我们把高程3上的代码改一下,改的更像我自己写的:

var person = {};

// 以下代码等同于函数setName中的操作
var obj = {};
obj.name = "Nicholas";
obj = {};
obj.name = "Greg";

alert(person.name); // 你说这里输出什么?

最后一行代码输出的肯定是'Nicholas',那意思是复制引用类型变量也是值传递咯?

我还是不解,于是我去网上搜,“JavaScript参数传递是值传递还是引用传递”,如果你去搜过你就会发现,99.999%的回答都是贴的高程3的代码,要么就是改下变量的值,我为什么这么肯定?因为声明个对象都按照高程3上的new Object()声明的,总之我声明对象都用字面量声明。

网上搜索无果,因为网上就算讲的再细,无非就是把高程3抄的更详细,没有太多自己的想法。

这时候我就有个疑问了,是不是我自己理解错了引用传递的意思了?

搜了下引用传递是啥意思:

所谓引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。

干,原来引用传递的意思是将真实值的地址直接传进去,而不是复制一个地址进去,说白了就是真的把变量本身给传进去了。

搞了那么久原来是我定义理解有误,那这样就很明了了。

直接放结论:

1. JavaScript中参数传递是值传递
2. 引用传递的意思是将变量本身的地址传递进去,而不是复制一个地址穿进去(这是值传递)
3. 复制引用类型的变量值可以理解为值传递
4. 网上太多所谓的观点以及分析无非是将书上的内容用自己的输入法打一遍

相关文章

  • JAVA是按值传递还是按引用传递

    java中对象作为参数传递给一个方法,到底是值传递,还是引用传递? String和int参数传递是按值传递还是引用...

  • 数据结构与算法 javascript

    基础概念 javascript中,函数的参数传递方式都是按值传递,没有按引用传递的参数。但是javascript中...

  • Python初学者笔记(八):函数参数的值传递和引用传递

    函数参数的值传递和引用传递 像我们最熟悉的 C 语言,再写函数参数的同时需要规定函数参数到底是值传递还是引用传递。...

  • 再学JS--函数参数传递类型

    JavaScript的函数参数传递分为按值传递、按引用传递以及按共享传递。 按值传递 什么是按值传递? 把函数外部...

  • JavaScript中参数传递到底是值传递还是引用传递

    本文只是一种生活记录,建议直接看底部结论 今天在看《高程3》的时候说ECMAScript所有参数传递都是值传递,没...

  • Go语言学习笔记(三)

    指针 Go的指针不能运算 参数传递 Go的参数传递是值传递(值传递:开辟新的空间,拷贝传递参数的值,引用传递:引用...

  • 方法参数

    一、参数传递 1.参数传递有两种类型:按值传递和按引用传递。 2.按值传递指变量使用的是参数传递的值,而按引用传递...

  • 数组

    Math.sqrt(x) Math.abs(x) Javascript中,函数的参数传递方式都是按值传递,没有引用...

  • 按值传递与按引用传递

    按值传递 -- 传递的是参数的值,即参数本身。 按引用传递 -- 传递的是指向参数的值的引用(指针),而不是参数的...

  • var、let、const

    javascript对象是引用传递,基本类型是按值传递 ps:javascript里没有引用传递其实是传递引用? ...

网友评论

      本文标题:JavaScript中参数传递到底是值传递还是引用传递

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