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"