Google App 脚本变量范围未按预期运行

问题描述 投票:0回答:1

我正在努力使用 Google 应用程序脚本。

  1. 我的第一个问题是编辑器坚持要求我定义一个函数作为入口点,但是该函数之外的任何内联代码也会在该函数之后执行。
function myFn() { Logger.log("In Function"); }
Logger.log("In main");
myFn();

产生:

In Function
In main
In Function

虽然我认为这真的很奇怪,但我正在通过设置一个虚拟函数作为入口点来解决它。这可能与我在这里不明白的其他内容有一些关系。

  1. 在内联/主作用域中定义的变量似乎不具有全局作用域。

  2. 尝试通过引用传递数组并没有像我预期的那样工作。

考虑:

function byRefFn(myarr) {
   Logger.log("DEBUG: in byRefFn")
   myarr["testing"]="set in byRefFn";
}

function byGlblFn() {
   Logger.log("DEBUG: in byGblFn")
   myarr["testing"]="set in byRefFn";
}

function dummy()
{}

var myarr=[];
byRefFn(myarr);
Logger.log("DEBUG: myarr=" + JSON.stringify(myarr));

byGlblFn();
Logger.log("DEBUG: myarr=" + JSON.stringify(myarr));

产生....

1:48:59 PM  Notice  Execution started
1:48:59 PM  Info    DEBUG: in byRefFn
1:48:59 PM  Info    DEBUG: myarr=[]
1:48:59 PM  Info    DEBUG: in byGblFn
1:48:59 PM  Info    DEBUG: myarr=[]
1:49:00 PM  Notice  Execution completed

我几乎可以相信内联代码并未真正在全局范围内执行,但无法为特定键设置值是一个问题。我知道使用 .push(value) 值仍然存在 - 这没有帮助。

如何在不同范围内定义的数组中设置键+值?

javascript google-apps-script
1个回答
0
投票
var myarr=[];
myarr["testing"]="set in byRefFn";

来自 JavaScript 文档

JavaScript 数组不是关联数组,因此,数组元素不能使用任意字符串作为索引来访问,但必须使用非负整数(或其各自的字符串形式)作为索引来访问。

要使其正常工作,请将

myarr
声明为对象
{}
而不是数组
[]

© www.soinside.com 2019 - 2024. All rights reserved.