对JavaScript 数组清除附带函数内存会不会有一定的减少

image.png

这个代码清除了像 push,fill,some... 的函数调用
而只保存了 length索引取值
这种写法 内存占用会不会减少?

如果内存占用减少,那么 这个写法是很适合写那些只需要读的数据,不需要改变的数据。

阅读 2k
2 个回答

这个理论上不会减少内存占用,因为标准数组对象的内置方法其实是运行环境中内生的,这些方法和数组对象中实体数据之间并不是直接联系。根据javascript中内存中数组对象的组织,大致上可以认为是

数组对象{
    数组元素集,
    数组长度等属性值,
    数组属性方法(指针值,即__proto__值)
}

这里,你所谓的把__proto__设置为null来清楚数组对象对应的方法其实对某个具体数字占用内存空间来说没有意义,因为数组对象在内存中的存储结构(大小)没有发生任何实质性改变。借用C语言中对某个结构体占用空间来类比,即数组属性中__proto__的值的类型一定情况下,__proto__具体的值并不影响数组本身占用空间大小,再通俗的说,__proto__是一个内存指针值(变量)时,它的值为null还是实际一个有意义的内存值,对__proto__占用空间来说是一样的。

不会。因为生成对象的时候并没有把对应的原型给拷贝过来,而是为这个对象创建了对其原型的一个引用,而你的操作仅仅是解除了这种引用,其原型还好好地保留着,随时准备被其他实例访问。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题