摘要:之前看高级程序设计时就遇到过一个问题,就是函数传参的问题,书上说是按值传递,而非按引用传递。我个人理解就是,中全部是按值传递。
之前看《javascript高级程序设计》时就遇到过一个问题,就是函数传参的问题,书上说是按值传递,而非按引用传递。很多人都会认为js里面有两种传值方式,一种是复制,另一种是数组、对象等按引用传递,后来看到知乎上面一道题后才发现不是那么简单。我个人理解就是,js中全部是按值传递。
这个是高级程序设计里面的例子:
也许很多人会迷惑,person.name不该是Greg吗?为什么输出Nicholas?
因为setName函数里面其实相当于把person对象的地址复制了一份,然后赋值给了obj,但是obj=new Object()这句将另外一个地址赋值给了obj,所以下面obj不管怎么修改都不会影响person。
这里还有另外一个例子:
var a=[1,2,3]; var b=a; a=[1,2,3,4]; console.log(b); //1,2,3
按照正常的想法,a和b是引用的同一个数组对象,当a改变的时候,b也会改变,可是这里面b却没有改变,难道这个是单纯的复制a的值给b?
这个和上面的例子差不多,也是把a指向对象的地址复制给了b,然后a=[4,5,6]相当于a指向了另外一个数组,所以b还指向原来的数组,并不会发生变化。
这里还有一个例子:
var a=[1,2,3]; var b=a; a.push(4); console.log(b); //[1,2,3,4]
这里面因为a改变的还是原来数组,所以b也会跟着变化。
最后奉上一道自己笔试做错的题。
var test1=new Boolean("false"); console.log(test1); //true
注意:如果逻辑对象无初始值或者其值为 0、-0、null、""、false、undefined 或者 NaN,那么对象的值为 false。否则,其值为 true(即使当自变量为字符串 "false" 时)!
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/50049.html
摘要:中所有函数的参数都是按值传递的。基本类型本身是按值传递,具有不可变性,对基本类型的修改,实质上都是在栈内存中创建了新的值。中把这种拷贝也认为是按值传递。 本文共 1200 字,读完只需 5 分钟 概述 参数的传递分为按值传递和按引用传递,而 JavaScript 中参数的传递只有按值传递。 ECMAScript 中所有函数的参数都是按值传递的。 所谓按值传递就是: 把函数外部的值复制给...
摘要:之前看高级程序设计时就遇到过一个问题,就是函数传参的问题,书上说是按值传递,而非按引用传递。我个人理解就是,中全部是按值传递。 之前看《javascript高级程序设计》时就遇到过一个问题,就是函数传参的问题,书上说是按值传递,而非按引用传递。很多人都会认为js里面有两种传值方式,一种是复制,另一种是数组、对象等按引用传递,后来看到知乎上面一道题后才发现不是那么简单。我个人理解就是,j...
摘要:按引用传递时,函数的形参接收实参的隐式引用,而不再是副本。探究值的传递方式的基本类型,是按值传递的。但这样是否说明的对象是按引用传递的呢我们再看下面的例子仍然是并未被修改为如果是按引用传递,修改形参的值,应该影响到实参才对。 最近遇到个有趣的问题:JS中的值是按值传递,还是按引用传递呢? 在分析这个问题之前,我们需了解什么是按值传递(call by value),什么是按引用传递(ca...
这几天遇到js参数传递方式的问题,深切探究一番,将所得结果总结于此 常见的几种传递方式 传值调用(call by value) 在传值调用中实际参数被求值,其值被绑定到函数中对应的变量上(通常是把值复制到新内存区域)。在函数返回后调用者作用域里的曾传给函数的任何东西都不会变。 传引用调用(call by reference) 在传引用调用求值中,传递给函数的是它的实际参数的隐式引用(即实际参数的地...
阅读 3121·2021-11-10 11:35
阅读 1270·2019-08-30 13:20
阅读 1086·2019-08-29 16:18
阅读 2088·2019-08-26 13:54
阅读 2115·2019-08-26 13:50
阅读 921·2019-08-26 13:39
阅读 2439·2019-08-26 12:08
阅读 1928·2019-08-26 10:37