在哪里可以阅读有关GS文件执行顺序规则的文档?
为了解决这个问题,我创建了两个简单的对象,每个对象都在各自的文件中。
1_File.gs
var ObjB = new Object();
ObjB.sayName = "[" + ObjA.sayName + "]";
0_File.gs
var ObjA = new Object();
ObjA.sayName = " I'm A ";
诸如...的电话
Logger.log(ObjA.sayName + " : " + ObjB.sayName);
...得到错误...
TypeError: Cannot read property "sayName" from undefined.
如果我将代码从1_File.gs移到0_File.gs,反之亦然,则没有错误,并且日志显示正确...
将0_File.gs重命名为2_File.gs也不影响执行顺序,因此我假设顺序取决于首先创建哪个文件。
没有“包含”或“导入”的概念可以使我明确执行顺序吗?
最佳答案
没有此类文档,我认为不会在任何时间发布。同样,C++中静态变量的初始化顺序也是未定义的,并且取决于编译器/链接器。
是的,没有“includes”,“imports”甚至“modules”,但是没有libraries。
也有使用闭包的解决方法。波纹管是示例代码。通过执行测试功能,日志包含c.d
。这个想法是在所有gs
文件中都有一个以init
开头的函数。在这些函数中,所有全局变量都被实例化。匿名闭包在Code.gs
文件实例化期间执行,并调用所有gs
文件的所有“init”函数。
代码。gs
var c;
function callAllInits_() {
var keys = Object.keys(this);
for (var i = 0; i < keys.length; i++) {
var funcName = keys[i];
if (funcName.indexOf("init") == 0) {
this[funcName].call(this);
}
}
}
(function() {
callAllInits_();
c = { value : 'c.' + d.value };
})();
function test() {
Logger.log(c.value);
}
d.gs
var d;
function initD() {
d = { value : 'd' };
};
关于google-apps-script - 项目中GS文件的执行顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12687907/