Javascript:如何将变量的值(不是引用)传递给函数?

lol*_*rup 0 javascript closures pass-by-reference pass-by-value

这是我正在尝试运行的简化版本:

for ( winDoorNo = 0; winDoorNo < aWinDoorSetSpec.no_of_winDoors; winDoorNo ++ ) {
    (function (winDoorNo, self) {

        self.tangentVectors_azimuth = [];
        self.tangentVectors_polar   = [];

        self.tangentVectors_azimuth[winDoorNo] = tangentPlane.tangentVector_azimuth;
        self.tangentVectors_polar[winDoorNo]   = tangentPlane.tangentVector_polar;

    })(winDoorNo, this);
}
Run Code Online (Sandbox Code Playgroud)

但我发现self.tangentVectors_azimuth数组只包含for循环索引变量的最后一个值.我发现这篇文章描述了一个类似的问题,我实现了建议的解决方案,即使用闭包.然而,这对我不起作用.执行for循环后,值this.tangentVectors_azimuth仍为:

[undefined, undefined, Object { x=0.01999999996662183, y=0.01599999957331022, z=0, more...}]
Run Code Online (Sandbox Code Playgroud)

Guf*_*ffa 5

您正在为循环中的每个迭代创建新数组,因此每次您将丢弃先前的结果.

在循环外创建数组:

this.tangentVectors_azimuth = [];
this.tangentVectors_polar = [];
for (winDoorNo = 0; winDoorNo < aWinDoorSetSpec.no_of_winDoors; winDoorNo++) {
  this.tangentVectors_azimuth[winDoorNo] = tangentPlane.tangentVector_azimuth;
  this.tangentVectors_polar[winDoorNo] = tangentPlane.tangentVector_polar;
}
Run Code Online (Sandbox Code Playgroud)