Javascript Google应用程序脚本中的变量分配问题
EDIT:我意识到我遇到的许多事情都是更新的v8gas运行时的工件。现在更新问题以反映这些变化。 我在谷歌应用程序脚本中遇到了一些有趣的行为。 我已经编写了一个小的演示函数来演示这种行为 下面的函数是一个包装函数,它允许我测试“PhaseToSequenceIssuedExpression”函数Javascript Google应用程序脚本中的变量分配问题,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,EDIT:我意识到我遇到的许多事情都是更新的v8gas运行时的工件。现在更新问题以反映这些变化。 我在谷歌应用程序脚本中遇到了一些有趣的行为。 我已经编写了一个小的演示函数来演示这种行为 下面的函数是一个包装函数,它允许我测试“PhaseToSequenceIssuedExpression”函数 函数testPhaseToSequence(){ var phaseSequenceArray=PhaseToSequenceIssuedExpression([26.1877,21.333],[17
函数testPhaseToSequence(){
var phaseSequenceArray=PhaseToSequenceIssuedExpression([26.1877,21.333],[17.828,-102.813],[10.812139.288]);
Logger.log(“相序阵列:“+phaseSequenceArray”);
}
使用=
实际上并不会创建阵列的深层克隆,因此total
和phasorray
基本相同。您可以使用或创建深度克隆
//浅克隆
VarA=[1,2,3];
var b=a;
b、 forEach(函数(val,i){
b[i]=val*2;
});
console.log(a);//[2, 4, 6]
控制台日志(b);//[2,4,6]
使用=
实际上并不会创建数组的深层克隆,因此total
和phasorray
基本相同。您可以使用或创建深度克隆
//浅克隆
VarA=[1,2,3];
var b=a;
b、 forEach(函数(val,i){
b[i]=val*2;
});
console.log(a);//[2, 4, 6]
控制台日志(b);//[2,4,6]
我可以在您的代码中看到四个问题,但您对最后两个问题感兴趣:
- 在
中,将testPhaseToSequence
分配给变量,但phaseToSequenceIssueDemonstration
不返回任何内容phaseToSequenceIssueDemonstration
- 在函数
中,您可以调用未在任何地方定义的函数phaseToSequenceIssuedInstance(phaseArray)
。但是,您已经定义了arrayPolarToCart
,因此请修复该问题arrayCartToPolar
- 最后但并非最不重要的一点,这应该是你问题的答案。在
中,您将phaseToSequenceIssuedInstance
传递给PolarArraray
。如您所见,此函数修改数组,因此在调用该函数后会得到不同的结果。怎么用?将arrayCartToPolar
的引用传递给polarArray
,然后将此引用传递给arrayCartToPolar
。请记住,现在total
和array
是引用的完全相同的对象,即total
。这意味着,无论您在Polarray
或total
上做了什么更改,它都将反映到array
上,这就是调用Polarray
后获得不同输出的原因arrayCartToPolar
- 基于相同的逻辑,
将其引用传递给phaserray
。因此,无论您对polarArray
所做的任何更改都会立即反映到polarArray
。这就是为什么Phasarray
和polarray
返回相同的值。只是因为它们指的是同一个对象phaserray
这不是谷歌应用程序的脚本行为,而是JavaScript行为,它实际上是许多其他编程语言的常见行为。因此,我建议您熟悉范围和定义。是一个很好的资源。我可以在您的代码中看到四个问题,但您对最后两个问题感兴趣:
- 在
中,将testPhaseToSequence
分配给变量,但phaseToSequenceIssueDemonstration
不返回任何内容phaseToSequenceIssueDemonstration
- 在函数
中,您可以调用未在任何地方定义的函数phaseToSequenceIssuedInstance(phaseArray)
。但是,您已经定义了arrayPolarToCart
,因此请修复该问题arrayCartToPolar
- 最后但并非最不重要的一点,这应该是你问题的答案。在
中,您将phaseToSequenceIssuedInstance
传递给PolarArraray
。如您所见,此函数修改数组,因此在调用该函数后会得到不同的结果。怎么用?将arrayCartToPolar
的引用传递给polarArray
,然后将此引用传递给arrayCartToPolar
。请记住,现在total
和array
是引用的完全相同的对象,即total
。这意味着,无论您在Polarray
或total
上做了什么更改,它都将反映到array
上,这就是调用Polarray
后获得不同输出的原因arrayCartToPolar
- 基于相同的逻辑,
将其引用传递给phaserray
。因此,无论您对polarArray
所做的任何更改都会立即反映到polarArray
。这就是为什么Phasarray
和polarray
返回相同的值。只是因为它们指的是同一个对象phaserray
这不是谷歌应用程序的脚本行为,而是JavaScript行为,它实际上是许多其他编程语言的常见行为。因此,我建议您熟悉范围和定义。是一个很好的资源。什么是
ArrayPolareTocart()
做的?我将在问题中包含有关此函数的信息。什么是ArrayPolareTocart()
做的?我将在问题中包含有关此函数的信息。这里有一些有用的要点。我对旧的Rhino运行时(ES5)非常熟悉,以至于GAS以前一直在运行