var p1={name:"zs",age:"12"},//对象在堆里。p1在栈里。 var p2=p1;//p1和p2引用同一个堆。 p2.name="ls",//操作了堆 console.log(p1.name)——>ls。 p2=null,//只是栈里的p2被删除了 console.log(p2.name)//此时报错 console.log(p1.name)//依然是ls。因为堆没有被删除,引用存在。
var a = { key1:"11111" } function Copy(p) {var c = {}; for (var i in p) { c[i] = p[i];//这里就是只传了值。c的堆里有了这些值 } return c; } a.key2 = [‘小辉‘,‘小辉‘]; var b = Copy(a);//这里指向了c指向的堆 b.key3 = ‘33333‘;//b操作了堆 alert(b.key1); //1111111 alert(b.key3); //33333 alert(a.key3); //undefined
function setName(obj) { obj.name = ‘Nicholas‘; obj = new Object(); obj.name = ‘Greg‘; } var obj = new Object(); setName(obj); alert(obj.name);//‘Nicholas‘
递归的例子:
function sum(i) { if (i == 1) return 1; return i + sum(i - 1); }
原文:https://www.cnblogs.com/yaoyao-sun/p/10387882.html