在我的 Google Script 项目中,我得到了两个 GS 文件 Code.gs
和 other.gs
。
code.gs 看起来像
var globalSettings = {};
settings();
function settings(){
other();
globalSettings.fileName = "file";
console.log("settings was executed");
}
function primary(){
console.log("primary was executed");
}
other.gs 看起来像
function other(){
console.log("other was executed");
}
当我运行函数 primary
时,我得到
ReferenceError: other is not defined
settings @ Code.gs:5
(anonymous) @ Code.gs:1
当我将函数 other
移动到文件 code
时,它可以工作。有人可以解释为什么吗?其他文件可以在项目中的任何地方吗?
答案 0 :(得分:2)
每次调用函数(在项目的任何脚本中),全局变量都会自动执行。
这就是为什么如果将var globalSettings = {}
定义为全局声明,每次在项目中运行任何函数时,都会执行所有全局调用,因此globalSettings
将被设置为一个空对象,这就是我不使用全局变量的原因。
全局调用 other
和函数声明 other
需要在同一个 gs
脚本中为了工作。或者您可以简单地从函数 other
或 settings
中调用 primary
,这样 other
可以保留在单独的脚本中。
例如,这将工作得很好:
code.gs
// define global variables
var globalSettings = {};
// adjust global variables here as a helper function
function settings(){
other();
globalSettings.fileName = "file";
console.log("settings was executed");
}
// main function to be executed
function primary(){
settings(); // call settings
console.log(globalSettings.fileName);
console.log(globalSettings.date);
console.log("primary was executed");
}
other.gs
// make additional adjustments to the global variables
function other(){
globalSettings.date = "today";
console.log("other was executed");
}
建议:
确保不执行全局声明的更好方法是使用 Class PropertiesService 类来存储一些脚本或用户数据,然后您可以全局或本地检索它们(在函数内部) ) 并且这将确保您不会在每次执行时意外执行它们,因为全局声明就是这种情况。