Запуск функции в редакторе сценариев не передает аргументы функции.В настоящее время у вас есть 3 пользовательских объекта в глобальном пространстве имен вашего проекта (в том числе из Google):
createMessage
(объект функции) template_data
(строка) data
(объект).
Строка function createMessage(data, template_data)
объявляет объект createMessage
как функциональный объект и указывает, что первые два аргумента, переданные функции, известны в области действия функции какdata
и template_data
соответственно.Эти объявления аргументов области действия функции скрывают любые более отдаленные объявления (т. Е. От глобальной области видимости или области действия включающей функции).
Решение состоит в том, чтобы либо написать «функцию драйвера», которую вы фактически выполняете, в которой выОпределите входные параметры для вызываемых вами функций или удалите параметры из вызова функции:
var data = {...}; // global var
var template_data = {...}; // global var
function driver() {
createMessage(data, template_data); // uses the globally scoped `data` & `template_data` objects
var otherdata = 1,
otherTemplate = 2;
createMessage(otherdata, otherTemplate); // uses the function-scoped `otherdata` and `template_data` objects
}
function createMessage(someData, someTemplate) {
Logger.log(someData);
Logger.log(arguments[0]); // equivalent to the above line.
// ...
}
Как избежать затенения ссылок:
function createMessage() { // removed `arguments` reference binding
Logger.log(data); // accesses global-scope `data` object because there is no `data` reference in the nearest scope
Чтобы помочь в этом сценарии - предотвращение ручного выполнениячерез редактор сценариев функций, нуждающихся в параметрах. Обычно я делаю функции приватными, добавляя к имени трейлинг _
: function cantBeRunManually_(arg1, arg2, arg3) { ... }
Ссылки: