Node.js以某种方式使用递归函数更改我的Object

时间:2017-02-17 22:29:36

标签: javascript node.js object recursion scope

我不知道我做错了什么,但是这个代码在第一次执行更改我的library(raster) r <- raster(nrow=18, ncol=36) r$value <- 1:ncell(r) r$area <- as.data.frame(area(r))$layer head(as.data.frame(r)) ras_to_pol <- rasterToPolygons(r) spplot(ras_to_pol, "area", main="Area of initial cells converted to polygons") 对象后,在第二次执行时我得到了非常大的变量(因为代码使用recipesData)。

如果我使用调试器对象(recipesData)开始在这里更改:

recipesData

child[child_part] *= craft[part]; 甚至是与child无关的另一个变量。

这是我使用的代码:

recipesData

2 个答案:

答案 0 :(得分:0)

JavaScript中的对象是通过引用传递的,而不是值。在getBasics内,craft是与recipeData相同的基础数据的引用。 child是对recipeData个内部对象之一的引用。

因此,当您使用*=child中的属性分配新值时,它会对recipeData变量引用的相同数据进行操作。< / p>

答案 1 :(得分:0)

下面的子项只是对recipesData的引用。

if (recipesData.hasOwnProperty(part)) {
            var child = recipesData[part];
            break;
        } else
            child = null;
    }

因此稍后会修改实际的recipesData。如果你想拥有数组的真实副本,你可以做到这一点,例如与slice()或concat()类似:

child = [].concat(recipesData[part]);