2

如果我在单个 Apps 脚本项目中有多个文件具有同名的函数,如何确定范围?

  • 按文件?
  • 通过动态范围?
  • 通过静态范围?
  • 函数创建时间(创建脚本文件)?

例如,如果我有Stuff.gs

function start() {
  var number = getNumber();
}

function getNumber() {
  return 5;
}

More.gs

function getNumber() {
  return 10;
}

我打电话start(),谷歌的平台如何确定调用哪个函数?

我做了这样的测试,但没有得到预期的输出。输出是10.0。在我看来,既没有应用文件范围规则,也没有应用静态范围。我创建了第三个文件来进一步测试:

测试.gs

function getNumber() {
  return 15;
}

现在输出是15.0. 我进一步测试并在More.gs 中将10更改为20以查看保存时间戳是否确定了范围,但输出仍然是.15.0

所以对我来说, .gs文件的创建日期似乎决定了范围 - 使用包含函数名称的文件上的最新时间戳。我的假设是否正确,或者这只是巧合并且以其他方式确定?

此外,这是特定于 Google 的 Apps 脚本还是一般的 Javascript?

4

1 回答 1

3

看起来这些声明都只是在全局范围内。后续定义将覆盖之前的定义,因此如果您首先包含Stuff.gs, then More.gs, thenTest.gs并在之后调用您的函数,这将是有意义的。

JS 中的作用域是静态的(假设没有with和 local的严格模式eval),但全局作用域可以根据加载的模块(及其顺序)动态修改。这是大多数 JavaScript 环境中的行为,有些还具有额外的文件(模块)范围。

于 2013-11-04T00:51:53.130 回答