var a = 1; var b = a; a = 2; console.log(a);// 2 console.log(b);// 1 var c = '123'; var d = c; c = '1234'; console.log(c);//'1234' console.log(d);//'123'
2、引用类型
在这里需注意的是,引用指向的是具体的对象,而不是另一个引用。
1 2 3 4 5 6
var a = { 'name': 'a'}; var b = a; //此时b.name为'a' a.name = 'c'; //b.name = a.name = 'c' b.name = 'd'; //b.name = a.name = 'd' console.log(a.name);// d console.log(b.name);// d
对象的克隆:
1 2 3 4 5 6 7 8 9 10
var a = { 'name': 'a','age':'1'}; var b = {}; for(var key in a){ b[key] = a[key]; } b.name = 'b'; console.log(a);//{ 'name': 'a','age':'1'} console.log(b);//{ 'name': 'b','age':'1'} console.log(a.name);// a console.log(b.name);// b
再来看另一个栗子:
1 2 3 4 5
var a = { 'name':'a'}; var b = a; a = 1; //此时a已经不是引用类型 console.log(b.name); // a console.log(a.name); //undefined
关于数组的一个栗子:
1 2 3 4 5
var a = ['1','2','3']; var b = a; b.push('4'); console.log(a); // ['1','2','3','4'] console.log(b); // ['1','2','3','4']
怎样实现对一个数组的克隆,同时操作克隆对象又不影响原数组呢?
1 2 3 4 5 6 7 8 9
var a = ['1','2','3']; var b = []; var n = a.length; for(var m = 0; m < n; m++){ b.push(a[m]); } b.push('4'); console.log(a); // ['1','2','3'] console.log(b); // ['1','2','3','4']
关于函数的一个栗子
1 2 3 4 5 6 7 8 9 10 11
var a = function(){ var x = 0; console.log(x); } var b = a; b = function(){ var x = 1; console.log(x); } a();// 0 b();// 1