技术编程|几个例子理解不同数据类型的堆栈内存处理( 二 )


文章图片
GO global object 全局对象
不同于VO,VO(G)是全局变量对象,存储当前上下文声明的变量的
GO global object 全局对象,是加载页面默认形成的 。在浏览器中,加载页面时,在全局上下文中会默认定义一个叫window的对象,其中有setTimeout,setInterval等供js调用的属性和方法
技术编程|几个例子理解不同数据类型的堆栈内存处理
文章图片
注意区分VO和GOJavaScript 中有一个特殊的对象,称为全局对象(Global Object),它及其所有属性都可以在程序的任何地方访问,即全局变量在浏览器 JavaScript 中,通常 window 是全局对象,而 Node 。js 中的全局对象是 global,所有全局变量(除了 global 本身以外)都是 global 对象的属性 。在 Node 。js 我们可以直接访问到 global 的属性,而不需要在应用中包含它 。global,process,__filename,__dirnamejs如何运行(示例4)var a = {n: 1};var b = a;a.x = a = {n: 2};console.log(a.x);console.log(b);var a = {n: 1};var b = a;
前两行代码执行如下,不在阐述:
技术编程|几个例子理解不同数据类型的堆栈内存处理
文章图片
要想理解a.x = a = {n: 2};
简单说一下运算符优先级var a=12,b=13;
相当于var a=12var b=13var a=b=13
相当于b=13var a=b//或者var a=13
正常计算都是从右到左处理的(当然第一步还是创建值)
但是不管是a.x=b=13还是b=a.x=13都要先计算a.x因为优先级比较高(成员访问的优先级为19,仅次于()运算,运算符优先级 )
a.x = a = {n: 2};运算步骤如下
技术编程|几个例子理解不同数据类型的堆栈内存处理
文章图片
开辟内存,假设地址为0x000001
将地址放入栈中
a.x = 地址
技术编程|几个例子理解不同数据类型的堆栈内存处理
文章图片
a = 地址
技术编程|几个例子理解不同数据类型的堆栈内存处理
文章图片
所以现在a指向0x000001,b指向0x000000,即a为{n:2},b为{n:1,x:{n:2}}
结果:
技术编程|几个例子理解不同数据类型的堆栈内存处理
文章图片
【技术编程|几个例子理解不同数据类型的堆栈内存处理】一个变量只可以关联一个栈中的值,但是一个栈中的值,可以被多个变量关联


推荐阅读