猿问
变量作用域及栈堆储存
代码:
问题:这三个obj之间的关系是什么?从作用域和栈堆的角度分析?
当年话下
浏览 503
回答 2
2回答
哈士奇WWW
首先你要说明到底哪三个,这里不止三个啊,假设是这样:function sum(obj) { // 第二个 obj obj.a = 3; var obj = new Object(); // 第三个 obj obj.a = 2; console.log(obj.a);}var obj = { a: 1 }; // 第一个 objsum(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之间的关系是什么?第一个和第二个 obj 都是指向了同一个对象,obj1 === obj2第三个 obj 指向一个新的对象,obj1 !== obj3如果想要更多人回答你的问题,建议你代码不要拍照,描述更加清晰些。希望对你有帮助。
0
0
0
江户川乱折腾
第一个obj是sum函数的形参,第二个obj是sum函数的内部变量,第三个obj是sum函数调用时的实参。
0
0
0
随时随地看视频
慕课网APP
相关分类
JavaScript
我要回答