如果您在Stackoverflow上搜索如何在JS中缓存变量,您将找到指向cookie或本地存储的答案。
另一方面,“缓存”一词通常用作:“缓存数组的长度,这样我们就不必每次都计算它。”
当然,我们并没有在cookie或本地存储中缓存长度。我的问题是:
“缓存”长度的位置在哪里?它在记忆中吗?如果是这样,为什么我们使用“缓存”一词?
答案 0 :(得分:8)
这是一个非常重载的问题,看起来你在这里混淆了一些概念。希望这会有所帮助:
问题""缓存"的位置在哪里?长度?是在记忆中吗?"给定某个值的任何变量都存储在内存中的特定位置。在JavaScript中,分配给基本类型(如数字或字符串)的变量将复制到新的内存位置(按值传递),而对象文字包含对特定对象在内存中的位置的引用值(通过引用传递) )。 What's the difference between passing by reference vs. passing by value?
您的问题"缓存数组的长度,因此我们不必每次都计算它#34;实质上归结为通过利用已知在整个算法范围内保持不变的变量来优化特定的算法性能。即array.length查找比确定单个变量的值稍长。
"缓存"在" cookies或本地存储的背景下#34;可以解释为存储或持久化某些数据的时间长于应用程序实例的生命周期。例如。数据库中的用户对象,在用户登录时获取。这种数据通常持久保存到像硬盘驱动器这样的固定介质,尽管存在许多异常并且可能非常复杂。
也:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management
答案 1 :(得分:3)
缓存数组长度意味着在一个简单的变量中保存数组的长度,循环不必每次迭代都调用数组长度例程。
下面的代码必须计算每次迭代中数组的长度。这可能成本很低。
var total = 0;
for (var i = 0; i < myArray.length; i++) {
total += myArray[i];
}
相反,下面的代码将数组长度缓存到一个简单的变量(内存)。因此,从技术上讲,循环必须仅检查每次迭代的内存指针的值。
var total = 0;
for (var i = 0, len = myArray.length; i < len; i++) {
total += myArray[i];
}
您可以通过缓存获得轻微的性能优势。以下是对上述情况的性能比较。
您可以找到原始文章here。