gpt4 book ai didi

javascript - 如何在 for(prop in obj) 循环中分配内存以及最佳方法是什么

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:16:08 25 4
gpt4 key购买 nike

我有以下片段

for(var prop in windowManager.owners) {
if(windowManager.owners.hasOwnProperty(prop)) {
if(windowManager.owners[prop] instanceof WhatAmILookingFor) {
if(windowManager.owners[prop].id=== lookupid) {
return windowManager.owners[prop];
}
}
}
}

将对 windowManager.owners[prop] 的引用存储在像这样的临时变量中会更好吗?

var win = null;
for(var prop in windowManager.owners) {
if(windowManager.owners.hasOwnProperty(prop)) {
win = windowManager.owners[prop];
if(win instanceof WhatAmILookingFor) {
if(win.id === lookupid) {
return win;
}
}
}
}

这样做有好处吗?这样做会有gc开销吗?还是因为 win 对象被重用而对 gc 没有影响?

什么是最好的行动方案?

我确实意识到我们在这里谈论的是微秒级的速度差异,我只对“幕后”操作感兴趣,例如内存分配/重用的方式以及内存最佳实践。

最佳答案

第二个循环更快,因为它不会一遍又一遍地遍历同一个对象。

windowManager.owners[prop]

表示“在当前范围内查找 windowManager,然后找到一个属性 owners,然后在其中找到一个插槽 prop”。由于 JavaScript 用于定位属性的复杂规则,因此成本很高。

第二个问题是错别字。如果将这种复杂的表达式压缩到一个局部变量中,就可以减少拼写错误的可能性。想象一下,有人将 prop 替换为 prop2 并且错过了三分之一 - 这种情况实际上经常发生。

最后,它使代码更具可读性,而且您可以使用这种方法通过给变量一个名称来表达意图,该名称解释了它存在的原因。

在内存方面,差异并不大。即使 win 处于全局级别,它也只是对现有对象的引用(= 几个字节)。不过,它可能会导致泄漏。因此,在循环后将其设置为 null 或将整个代码包装在一个函数中以确保它被清理可能是明智的。

关于javascript - 如何在 for(prop in obj) 循环中分配内存以及最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30523884/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com