我们知道对象存储在堆区域中。
假设我们在声明的功能块中:
var a=[1,2]
还有
var b=new Array(1,2)
两个数组对象都将存储在堆中还是a
在堆栈区域中有空间并且b
是否在堆中?
答案 0 :(得分:1)
无论使用数组初始化程序(也称为“数组文字”,[1, 2]
)还是Array
构造函数(new Array(1, 2)
)创建数组,存储位置都没有关系。
关于数组的存储位置:
这取决于JavaScript引擎的实现,因此因实现而异。
一些高级引擎使用 escape分析来确定将对象(包括数组)分配到哪里,这意味着它们可以分配在堆栈上,也可以分配在堆上,具体取决于引擎是否看到它们是该函数的局部变量,或者它们是对该函数的转义(例如,通过返回或分配给函数关闭的变量等)。
旁注:几乎没有任何理由使用new Array
。