函数范围规则(Google Apps 脚本项目)
Function Scope Rules (Google Apps Script Project)
如果我在单个应用程序脚本项目中有多个文件具有同名函数,如何确定范围?
- 按文件?
- 通过动态范围?
- 通过静态范围?
- 函数创建时间(创建脚本文件)?
例如,如果我有 Stuff.gs:
function start() {
var number = getNumber();
}
function getNumber() {
return 5;
}
More.gs:
function getNumber() {
return 10;
}
我叫start()
,谷歌的平台如何决定调用哪个函数?
我做了这样的测试,但我没有得到预期的输出。输出为 10.0
。在我看来,既不应用文件范围规则,也不应用静态范围。我创建了第三个文件来进一步测试:
Test.gs:
function getNumber() {
return 15;
}
现在输出是15.0
.我进一步测试并在 More.gs 中将 10 更改为 20,以查看保存时间戳是否决定了范围,但输出仍然15.0
。
所以对我来说,.gs 文件创建日期似乎决定了范围 - 使用包含函数名称的文件上的最新时间戳。我的假设是否正确,或者这只是一个巧合,它是以其他方式确定的?
另外,这是特定于Google的Apps Script还是一般的Javascript?
看起来这些声明都只是在全局范围内。后续定义将覆盖以前的定义,因此,如果您首先包含Stuff.gs
,然后More.gs
,然后Test.gs
并随后调用您的函数,这将是有意义的。
JS中的范围是静态的(假设没有with
和本地eval
的严格模式),但全局范围可以根据加载的模块(及其顺序)动态修改。这是大多数JavaScript环境中的行为,有些还具有额外的文件(模块)范围。
使用带有闭包的 IIFE 来封装
More.gs
const More = (function() {
function getNumber() {
return 15;
}
return {
getNumber
};
})();
Test.gs
const Test = (function() {
function getNumber() {
return 15;
}
return {
getNumber
};
})();
Stuff.gs
function start() {
var number = getNumber();
var numberMore = More.getNumber();
var numberTest = Test.getNumber();
}
在上面的代码中,IIFE 用于创建一个闭包,该闭包封装了 count 变量和两个内部函数:递增和递减。count 变量是私有的,只能由内部函数访问。
IIFE 立即执行,返回一个引用内部函数(递增和递减)的对象。由于闭包,这些函数可以访问私有计数变量。
- Jquery脚本删除表单中的所有项目'的收藏
- 在同一项目上使用咖啡脚本和打字稿
- 更新到以前的验证脚本(学校项目)
- 函数范围规则(Google Apps 脚本项目)
- 为什么Visual Studio Node.js项目使用shebang/bash脚本来启动服务器
- 使用类似 Greasemonkey 的脚本自动选择每页的项目(下拉列表)
- 新鲜的MVC 3项目给了我奇怪的不显眼的验证脚本错误
- 如何从新的空 MVC 项目中删除 js 脚本
- 当项目不再聚焦时,jQuery 停止脚本
- 无法在本机脚本中设置操作栏项目的样式
- 管理项目中 asp.net 常见的 jQuery 脚本文件
- 在path项目中编写文件js脚本
- 在项目中使用谷歌应用程序脚本功能
- 如何从Google Apps脚本项目属性中存储和检索对象
- 我应该如何用外部脚本构建Meteor项目
- 我可以在javascript脚本方法中获得中继器项目计数吗
- PHP循环通过脚本数组&删除项目
- 在哪里放置图像文件夹和java脚本文件夹在我的项目
- 从客户端脚本的ASP列表框中删除项目
- 多个文件组成类型脚本项目