了解 JavaScript 中的按值传递和按引用传递
1. 传值(按值)
变量的值被复制出来,会和原来的值无关,也就是说,虽然新的值改变了,但原来的值不会改变。 在 JavaScript 中,基本类型是按值传递的。
复制代码代码如下:
函数 testPassValue()
变量m=1;
变量n=2;
// 复制m和n的值并将它们传递给passValue
passValue(m,n);
警报(米); //将是原始值
函数 passValue(a,b)
a=a+b; //改变a的值,其中a只是原始值的副本
警报(一);
输出结果:
2. 参考。
引用本身的副本被传递给函数javascript 引用值,而引用所指向的对象并没有被复制传递(java中也是如此)。 在函数中,如果对象的属性值发生改变,由于原来的引用指向同一个对象,因此会通过原来的引用来访问改变后的值;
但如果在函数上只将引用指向一个新对象,则原对象的值不会改变,只会改变复制的引用。
复制代码代码如下:
函数 testPassValue()
var date = new Date(2006,02,27);
警报(日期.getDate()); //输出为27
// 复制日期引用本身并将其传递给 passReference。 注意date指向的对象还没有被复制
通过参考(日期);
警报(日期.getDate()); //输出为12
//同上
更改参考(日期);
警报(日期.getDate()); //输出仍然是12
函数 passReference(da)
//因为da和原引用指向同一个对象,在函数外javascript 引用值,通过原引用访问到的将是该对象的'date属性的值,也就是改变后的值。
达。 设置日期(12);
函数changeReference(da)
//此时da引用实际上是原始引用的副本,并且引用本身会被重新参数化,不会影响原始引用
da= 新日期(2007,05,11);
// 将da引用指向一个新的对象,此时原来的引用仍然指向原来的对象
警报(da.getDate()); //输出为11
3 特殊字符串
在 JavaScript 中,String 也是通过引用传递的。 js中只有charAt方法,但没有对应的change方法,这和java中的String一样,都具有不变性。
复制代码代码如下:
var s1 = "你好";
var s2 = "地狱" + "o";
如果(s1==s2)
警报(“s1 = s2”); //这句话会被执行吗? 熟悉java的人可能会认为不会被执行(我对这句话相当挑剔,在java中会执行!),因为在java中==比较的是同一性。 其实在js中,String==是比较值是否相等,所以才会执行这句话。 但对于其他 Object == 比较与 java 中相同。
【JavaScript中传值和传引用的理解】相关文章:
1.
2.
3.
4、Java模式(函数)传值和传引用的问题
5.
6.
7.
8.
发表评论