博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js函数的传参是按值传对递
阅读量:4291 次
发布时间:2019-05-27

本文共 1222 字,大约阅读时间需要 4 分钟。

根据js高级程序设计第三版编写,对于函数的参数只能按值传递是这样解释的:

ECMAScript 中所有函数的参数都是按值传递的。也就是说,把函数外部的值复制给函数内部的参数,就和把值从一个变量复制到另一个变量一样。

基本类型值的传递如同基本类型变量的复制一样,

而引用类型值的传递则如同引用类型变量的复制一样。

有不少开发人员在这一点上可能会感到困惑,因 为访问变量有按值和按引用两种方式,而参数只能按值传递?????????

1:在向参数传递基本类型的值时,被传递的值会被复制给一个局部变量(即命名参数,或者用 ECMAScript的概念来说,就是 arguments 对象中的一个元素)。

function addTen(num)

{

num += 10;

return num;

} var count = 20;

var result = addTen(count);

alert(count); //20,没有变化

alert(result); //30

2:在向参数传递引用类型的值时,会把 这个值在内存中的地址复制给一个局部变量,因此这个局部变量的变化会反映在函数的外部。

function setName(obj)

{

obj.name = "Nicholas";

} var person = new Object;

setName(person);

alert(person.name); //"Nicholas"

有很多开发人员错误地认为:在局部作用域中修改的对象会在全局作用域中反映出来,就说明 参数是按引用传递的。

为了证明对象是按值传递的,我们再看一看下面这个经过修改的例子:

function setName(obj)

{

obj.name = "Nicholas";

obj = new Object;

obj.name = "Greg";

} var person = new Object;

setName(person);

alert(person.name); //"Nicholas"

如果 person 是按引用传递的,那么 person 就会自动被修改为指向其 name 属性值 为"Greg"的新对象。这说明即使在函数内部修改了参数的值,但原始的引用仍然保持未变。

至此书上对函数值传递讲解完毕,但是。。。。

(对书上这句话不是很理解,为什么按引用传递,结果应该是Greg???就算是按引用传递,传递的也是指向内存的地址,当对函数局部变量obj重新赋值新对象时,obj的存值也是新对象的内存地址,当然不能改变原内存地址所对应的对象值,当函数执行完毕,改新对象即函数内部的局部对象会被立即销毁。所以该点不能用来证明函数在传递对象参数的时候不是使用引用传递。)

其实用法和结果可能大家都理解且明白,本人也只是对这个概念抱有怀疑态度。有错误的地方,还请纠正。

转载地址:http://vtggi.baihongyu.com/

你可能感兴趣的文章
CompletableFuture 组合式异步编程
查看>>
mysql查询某一个字段是否包含中文字符
查看>>
Java中equals和==的区别
查看>>
JVM内存管理及GC机制
查看>>
Java:按值传递还是按引用传递详细解说
查看>>
全面理解Java内存模型
查看>>
Java中Synchronized的用法
查看>>
阻塞队列
查看>>
linux的基础知识
查看>>
接口技术原理
查看>>
五大串口的基本原理
查看>>
PCB设计技巧与注意事项
查看>>
linux进程之间通讯常用信号
查看>>
main函数带参数
查看>>
PCB布线技巧
查看>>
关于PCB设计中过孔能否打在焊盘上的两种观点
查看>>
PCB反推理念
查看>>
Java使用jxl导出Excel表格源码
查看>>
Web Service学习笔记(一)[web service的本质]
查看>>
Web Service学习笔记(二)[web service的三大技术基础]
查看>>