如果我在单个Apps脚本项目中有多个文件具有相同名称的功能,那么范围将如何确定?
例如,如果我有 Stuff.gs :
function start() {
var number = getNumber();
}
function getNumber() {
return 5;
}
和 More.gs :
function getNumber() {
return 10;
}
我致电start()
,Google的平台如何确定要拨打的功能?
我做了这样的测试,但没有得到预期的输出。输出为10.0
。在我看来,既不应用文件范围规则,也不应用静态范围规则。我创建了第三个文件以进一步测试:
Test.gs :
function getNumber() {
return 15;
}
现在输出为15.0
。我进一步测试并在 More.gs 中将 10 更改为 20 以查看是否保存时间戳< / em>确定了范围,但输出仍为15.0
。
所以对我来说,似乎 .gs 文件创建日期决定了范围 - 使用了包含函数名称的文件的最新时间戳。我在我的假设中是正确的还是这只是一个巧合而且它是以其他方式确定的?
此外,这是针对Google的Apps脚本,还是一般的Javascript?
答案 0 :(得分:3)
看起来这些声明都在全球范围内。后续定义将覆盖之前的定义,因此,如果您首先包括Stuff.gs
,然后More.gs
,然后Test.gs
并且之后调用您的函数则有意义。
JS中的作用域是静态的(假设没有with
和本地eval
的严格模式),但可以根据加载的模块(及其顺序)动态修改全局作用域。这是大多数JavaScript环境中的行为,有些还具有其他文件(模块)范围。