使用带有空输入js的shift

时间:2018-01-08 01:32:04

标签: javascript function variables

我有一个关于使用.shift方法的基本问题。下面是我的工作代码,将数字转换为所有数字的总和。转换为字符串并拆分为数组后,如果第一个值是' - '符号,我使用.shift删除此元素,然后使下一个值为负。我的问题是,' - '去哪儿了?我没有分配给任何变量的这个值会发生什么?

继续前进,我是否应该关注使用此方法,如果它可能会在我的代码中留下“浮动”的值?

function sumDigits(num) {
var numArr = num.toString().split('');
if (numArr[0] === '-') {
    numArr.shift();
    numArr[0] *= -1;
}
var total = numArr.map(Number).reduce(function(a, b) {
    return a + b;
});
return total;}

谢谢!

1 个答案:

答案 0 :(得分:1)

由于Javascript中的数组是可变的,因此数组中的每个元素都是对内存中某个位置的引用。当您创建新数组或向数组添加元素时,Javascript会隐式分配内存,然后从数组创建新引用以指向内存中新分配的对象。

在您的情况下,当您shift()时,您将删除对包含该元素的内存的引用,而不是元素本身。

那么Javascript如何实际从内存中删除这些项目?垃圾收集。垃圾收集的一个简单机制是检查内存中的所有对象,并计算对它的引用数。如果引用数为0,则它​​向垃圾收集器指示可以从内存中删除该对象。

因此,在您使用shift()删除对数组中第一个元素的引用之后,垃圾收集器稍后会进入并看到数组中第一个元素指向的对象现在没有任何内容引用它。因此垃圾收集是安全的,因此从内存中释放出来。

总而言之,由于Javascript的垃圾收集机制,您无需担心使用shift()导致内存泄漏。

如果您想了解更多内容,这里有一个关于Javascript内存管理的有趣link