本文主要是介绍JavaScript参数传递和对象复制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
(1)基本类型和引用类型
基本类型:指的是简单的数据段。在内存中占据固定的大小,放在占内存中。
引用类型:指的是那些可能由多个值构成的对象。引用类型的值是对象,保存在堆内存中。
(2)复制
基本类型:
var num1 = 6;
var num2 = num1;
alert('num1='+num1);
alert('num2='+num2);
由上图可以看出,基本类型的复制,是将原有的对象完全复制了一份,并且两者拥有独立的存储空间。
引用类型:
var obj1 = new Object()
obj1.name = 'zhangsan';
var obj2 = obj1;
alert(obj2.name); //zhangsan
由上图可见,引用类型的复制,复制的只是原来对象的引用,两个变量的引用指的都是堆内存的同一个对象。
(3)传递参数
JavaScript中所有函数的参数都是按照值传递的,也就是说,把函数外部的值复制给函数内部的参数,就像把一个变量的值复制给另一个变量一样。
还是从例子分析:
基本类型传递:
var num = 10;function addNum(num){num += 5;return num;
}var res = addNum(num);
alert('num='+num); //10
alert('res='+res); //15
代码分析:上述代码中将变量num传到addNum()函数中,相当于做了这么一件事:在addNum 函数作用域中有一个局部变量num,它复制了全局环境的num,
通过第二小节,我们很容易的分析出上述结果。
引用类型:
function setName(obj){obj.name = 'zhagsan';obj = new Object();obj.name = 'lisi';}var person = new Object();setName(person);alert(person.name); //zhangsan
</script>
代码分析:
首先我们声明了一个对象person,接着作为参数传递到了setName()函数中,
参数传递做了这么一件事,在setName()函数中有一个局部变量obj,它复制传递过来的参数对象,
也就是person,通过第二小节我们知道,引用类型的对象复制,复制的只是对对象的引用地址,所以在函数setName()中obj和person指向同一个对象,
接着通过obj.name = 'zhangsan',为对象增加了属性name,但是接下来的一行代码,obj = new Object(),使obj指向了一个新的对象的引用,所以从这里开始,
obj和person指向的不是同一个对象了。
这篇关于JavaScript参数传递和对象复制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!