我已经阅读了一些基本的 Google Apps 脚本文档/教程。我还没有找到任何关于代码执行“范围”的解释。
到目前为止,这是我的理解:
All code consists of one or more statements
All statements must (?) be contained in a "function"
(a slight different from non-google javascript? - is this a false assumption?)
All functions reside in a container called a "file"
Each "file" is part of a "project" container (or library)
Each project container is stored in a "spreadsheet" container.
这些是“物理”(编辑访问)边界。
我的问题是
执行期间语句的“逻辑”边界是什么?
我首先假设所有变量/对象在范围内都是全局的,类似于 JavaScript 在网页中的操作方式。我不认为“编辑访问”容器限制了变量/对象定义的范围。我错了。
我认为“库”结构类似于 PHP 的“包含”操作。我认为这样我就不必将相同的代码集复制到每个应用程序(电子表格容器)中,我需要在其中使用已经“测试”的代码。我假设包含项目可用的资源与包含项目公共资源可用的资源相同)。简而言之,我错了。“属性”存储在定义电子表格中,并被视为由包含项目“拥有”。
通过使用它,我现在了解到“项目密钥”只是向电子表格容器添加了一个新的“命名空间”。每个命名空间中发生的事情都保留在该命名空间中。命名空间之间唯一(最简单的)通信是通过函数参数和返回值。
特别是,用户和项目属性的范围仅限于并保留在其包含的电子表格文档中。电子表格文档中的每个项目都有一组单独的用户和项目属性。
相同的项目/库名称可以出现在多个电子表格文件中,并且是完全独立的。
这是在某处记录的吗?还有其他关于范围界定的事情我需要了解(来自共享同一项目/库的不同应用程序的线程之间的通信?
另外,如果一个函数传回对库范围内定义的对象的引用,它会保留在调用的项目中吗?我可以传递/返回一个指向项目的 UserProperties“服务”对象的变量并可以访问另一个项目中的数据吗?