Javascript 当将变量传递给函数时,我得到“无效参数”,但当我硬编码时,它在应用程序脚本中工作
这是我的测试功能:Javascript 当将变量传递给函数时,我得到“无效参数”,但当我硬编码时,它在应用程序脚本中工作,javascript,google-apps-script,function-call,Javascript,Google Apps Script,Function Call,这是我的测试功能: var testFolderId = 'di98kjsdf9...'; function testGetFolder(testFolderId){ folder = DriveApp.getFolderById(testFolderId); Logger.log("folders: " + folder); } 当我这样做的时候,它失败了。错误是:参数无效 但是,如果我将id硬编码到“DriveApp.getFolderById”函数中,它就可以
var testFolderId = 'di98kjsdf9...';
function testGetFolder(testFolderId){
folder = DriveApp.getFolderById(testFolderId);
Logger.log("folders: " + folder);
}
当我这样做的时候,它失败了。错误是:参数无效
但是,如果我将id硬编码到“DriveApp.getFolderById”函数中,它就可以工作
有什么解释吗?这对我来说毫无意义。当直接从脚本编辑器/菜单/按钮单击/触发器调用函数时,会发生以下操作序列: 首先,加载整个脚本并执行所有全局语句。这相当于在脚本标记中加载包含所有脚本的网页:…code.gs 您调用的函数被调用。这类似于在已加载脚本的底部添加callMyFunction 除了触发器之外,您调用的函数在运行时不传递任何参数。因此,所有参数都是未定义的 谨慎⚠️: 如果该函数由触发器调用,则传递的第一个参数通常是事件对象,而其余参数未定义 解决办法: 使用: 如果使用全局变量,则不应声明参数。 进一步阅读:
那么,除了您编写的代码之外,还有什么东西导致了该函数的执行?您没有testGetFoldertestFolderId;任何地方?如果只选择该函数并运行它,可能没有设置变量“testFolderId”。此时我的假设是,用于执行该函数的任何运行程序都不会传入任何变量。将函数参数命名为与全局变量相同,将导致方法无法使用全局变量,并且参数的值将是未定义的。解决方案是从函数testGetFoldertestFolderId{即,函数testGetFolder{中删除testFolderId,或者使用默认参数设置参数:函数testGetFoldertestFolderId=blabka{如果您认为可以帮助他人,请考虑添加答案。请参阅
var testFolderId="1dhhddci6";
//When this function is called by IDE, it called without passing any arguments
function testGetFolder(testFolderId){//<=same as calling `testGetFolder()` or `testGetFolder(null)`
//testFolderId is declared in local scope , but is undefined
folder = DriveApp.getFolderById(testFolderId);//<= testFolderId is undefined
//When this function is called by IDE, it called without passing any arguments
function testGetFolder(testFolderId="dhhddci6"){//<=same as calling `testGetFolder()`, but `testFolderId` is passed a value. Also same as calling `testGetFolder("dhhddci6")`
//testFolderId is declared in local scope and is defined(declared and intialized with a value)
folder = DriveApp.getFolderById(testFolderId);//<= testFolderId is "dhhddci6"
var testFolderId="1dhhddci6";
//When this function is called by IDE, it called without passing any arguments
function testGetFolder(){//<=same as calling `testGetFolder()`
//testFolderId is NOT declared in local scope, so variable is looked up in global scope(where it is defined)
folder = DriveApp.getFolderById(testFolderId);//<= testFolderId is "dhhddci6"