代码:
问题:这三个obj之间的关系是什么?从作用域和栈堆的角度分析?
首先你要说明到底哪三个,这里不止三个啊,假设是这样:
function sum(obj) { // 第二个 obj
obj.a = 3;
var obj = new Object(); // 第三个 obj
obj.a = 2;
console.log(obj.a);
}
var obj = { a: 1 }; // 第一个 obj
sum(obj);
console.log(obj.a);
执行该代码,此时是全局作用域,该作用域内有sum
、obj
以及所有的全局对象如console
。“第一个 obj”就是一个普通的变量,指向了{ a: 1 }
这个对象在内存中的地址。
执行sum
函数,将sum
函数的作用域入栈,该作用域内有obj
以及所有的全局对象如console
,分析该作用域内的obj
。首先“第二个 obj”是形参,可以理解为会在sum
函数作用域内声明obj
变量,该变量也指向了 { a: 1 }
在内存中的地址;“第三个 obj”是在该作用域内声明的一个变量,等于就是重复声明了obj
,将该变量指向了一个内存中新的对象{}
;
然后指向console.log
,将该作用域入栈,执行完后出栈。sum
函数执行完成,出栈。执行console.log
,入栈,再出栈。
最后在回答下你的问题,这三个obj
之间的关系是什么?
obj1 === obj2
obj1 !== obj3
如果想要更多人回答你的问题,建议你代码不要拍照,描述更加清晰些。希望对你有帮助。