在js一切都是值传递
来源:互联网 发布:java烟台工资一般多少 编辑:程序博客网 时间:2024/06/06 12:42
“传一个指针进去。。也是传指针的值进去。
传一个整数进去,也是传那个数字的值进去。”
传一个整数进去,也是传那个数字的值进去。”
今早整理笔记的时候发现了老久之前不知在哪抄下来的东西:
传值传递和传址传递
传值:
var p = 2;function f(p){ p = 3;}f(p);p// 2// 修改复合类型的参数值var o = [1,2,3];function f(o){ o = [2,3,4];}f(o);o // [1, 2, 3]
**********************************************
传址:
var o = { p:1 };function f(obj){ obj.p = 2;}f(o);o.p // 2// 修改数组的属性值var a = [1,2,3];function f(a){ a[0]=4;}f(a);a // [4,2,3];
我就纳闷了,传值和传址第二个例子传的参数不是一样的吗,怎么一个叫传值一个叫传址了。。。
再形变一下,我就蒙了:
var o = [1,2,3];function f(o){ o = [2,3,4]; o[1]=5;console.log(o);// [2,5,4]}f(o);console.log(o); // [1, 2, 3]
</pre><pre name="code" class="javascript">var o = [1,2,3];function f(o){ o[1]=5; o = [2,3,4];console.log(o);// [2,3,4]}f(o);console.log(o); // [1, 5, 3]
寻找真相。。。
********************真相只有一个************************
原来,在js里面,所有的函数,都是值传递。要么传递变量的地址值,要么传递变量的值。例如 var o = [1,2,3]。这个o是啥?学过c++都知道,你可以理解o是指向数组的指针。对不对。那么。你调用函数。只是把o的指针的值拷贝过去。
var o = [1,2,3];function f(o){ o[1]=5; o = [2,3,4]; console.log(o);}换个变量容易说事儿,
var o = [1,2,3];function f(_o){_o[1] = 5;_o = [2,3,4];console.log(_o);}
_o是o的一个值副本,大家都指向同一个内存数组对象,刚开始_o[1] = 5;就是修改了原数组的值。而_o = [2,3,4];_o已经指向了另外一个内存数组对象,已与o无关,这时,修改的话也对原数组,即o指向的拿块没有任何关系了。如果换了顺序,先执行_o = [2,3,4];那么_o更早指向新的内存数组对象,_o[1] = 5;只是对新的数组进行修改,对o指向的原数组并无影响。
不赋新值,操作的还是原对象,赋了新值,则与原对象无关。
意犹未尽是吗?推荐一个讲解更为详尽的link:
JS 中没有按地址(引用)传递,只有按值传递
0 0
- 在js一切都是值传递
- js中的一切都是对象
- 一切都是在见证
- 原来一切都是Maxthon在搞鬼。。
- js获取checkboxlist的值并在页面传递
- js中的值传递
- js的值传递和引用传递
- js值传递和引用传递
- JS 参数传递都是值传递
- JS引用传递和值传递
- js中的值传递和引用传递
- js值传递和引用传递问题
- js 参数传递方式:按值传递
- 一切都是问题,一切都着落在自身
- JS 参数传递到底是值传递还是引用传递?
- js 中参数传递(值传递和引用传递)
- JS只有按值传递
- JS传递值给android
- Android 中的长度单位详解(dp、sp、px、in、pt、mm)具体解释与换算
- Java中集合小结
- 串的模式匹配算法
- 文件的读写与编码
- DedeCMS安全设置必做,杜绝挂马
- 在js一切都是值传递
- 一元二次方程
- Android内存管理
- TCP Congestion Control 相关参数
- 转 frame与bounds的区别比较
- Installation failed due to invalid APK file!
- PC下安装androidx86一些问题的解决方法,gui start
- 织梦模板中实现游客匿名投稿功能
- struts2 struts.xml文件<constant>标签说明