函数中传递的参数,可以在函数内部通过 arguments 这个类数组对象进行访问。
function foo(a,b){
console.log('a = ' + arguments[0]);
console.log('b = ' + arguments[1]);
}
foo(1,2);//a = 1 b = 2
- 1.基本类型拷贝时:
以传递字符串为例:
var a = 1;
var b = a;
a = 2;
console.log(b);//1 b 不会随着 a 的改变而改变,仍然为1
- 2.复杂(引用)类型拷贝时:
var obj1 = {"name": "Couzin",
"age": 22
};
var obj2 = obj1;
obj1["name"] = "Hunter";
console.log(obj2['name']);//"Hunter"
引用类型的本质是:变量中保存的是指针,指针指向内存中的位置,该位置保存着对象。
引用类型有:对象、函数、数组、正则。
- 函数中参数的传递
- 简单类型
function sum(num){
/*助于理解
var num = count;
*/
return (num + 10);
}
var count = 20;
sum(count);
console.log(count);//count 的值不会改变
- 复杂(引用)类型
function modifyObj(obj){
/*助于理解
var obj = obj1;
*/
obj.age = 22;
}
var obj1 = {
"name": "Couzin",
"age": 10
};
modifyObj(obj1);
console.log(obj1);//改变了 {name: "Couzin", age: 22}
所以,对于引用类型,需要避免在拷贝后发生的这种情况。
- 浅拷贝 和 深拷贝
- 浅拷贝,以数组为例
function getArr(arr){
var arrtemp = [];
for(var i = 0;i < arr.length;i ++){
arrtemp[i] = arr[i];
}
return arrtemp;
}
这种方法只能拷贝一层,即 [1,2,3] 类型的对象;对于 [1,2,[a,b]] 类型的对象是无效的。
- 深拷贝
function copyObj(arr){
var arrtemp = [];
for(var i = 0;i < arr.length;i ++){
if((typeof arrtemp[i]) === "object"){
arrtemp[i] = copyObj(arr[i]);
}else{
arrtemp[i] = arr[i];
}
}
return arrtemp;
}