将变量传递给函数时,我得到“无效参数”,但是当我硬编码时,它可以在 Apps 脚本中工作

2023-12-20

这是我的测试功能:

var testFolderId = 'di98kjsdf9...';
function testGetFolder(testFolderId){
  folder = DriveApp.getFolderById(testFolderId);
  Logger.log("folders: " + folder);
}

当我这样做时它失败了。错误提示:参数无效

但是,如果我将 id 硬编码到“DriveApp.getFolderById”函数中,它就可以工作。

有什么解释吗?这对我来说毫无意义。


当直接从脚本编辑器/菜单/按钮单击/触发器调用函数时,会发生以下操作序列:

  • 首先,加载整个脚本并执行所有全局语句。这相当于加载一个网页,其中包含脚本标签中的所有脚本:<script>...code.gs..</script>

  • 您调用的函数被调用。这就像添加callMyFunction()在已加载脚本的底部。

  • 除了触发器的情况外,您调用的函数将在不传递任何参数的情况下运行。因此所有的论点都是undefined

注意⚠️:如果该函数是由触发器调用的,则传递的第一个参数通常是事件对象,而其余参数未定义。

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 

解决方法:

  • Use 默认参数 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Default_parameters:
//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"

进一步阅读:

  • Scope https://developer.mozilla.org/en-US/docs/Glossary/Scope
  • Closures https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures
  • 默认参数 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Default_parameters
  • Hoisting https://developer.mozilla.org/en-US/docs/Glossary/Hoisting
  • 事件对象 https://developers.google.com/apps-script/guides/triggers/events
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将变量传递给函数时,我得到“无效参数”,但是当我硬编码时,它可以在 Apps 脚本中工作 的相关文章

  • 如何使用 JavaScript 或 jQuery 克隆 HTML 元素的样式对象?

    我正在尝试克隆元素的样式对象 这应该允许我在更改后重置所述元素的样式 例如 el style left 50px curr style left 50px Modify the elements style The cloned style
  • 如何从浏览器向服务器发送“页面将关闭”消息?

    我想向每个 html 文档添加一个脚本 JavaScript 该脚本向服务器发送两条消息 页面确实打开了 页面将关闭 此消息包含页面打开的时间 打开消息应在文档加载时 或加载完成时 发送 这是简单的部分 The close message
  • 使用 next.js 进行服务器端渲染与传统 SSR

    我非常习惯 SSR 意味着页面得到完全刷新并从服务器接收完整 HTML 的方法 其中根据后端堆栈使用 razor pub other 进行渲染 因此 每次用户单击导航链接时 它只会向服务器发送请求 整个页面将刷新 接收新的 HTML 这就是
  • 使用 Enzyme 测试 `React.createRef` api

    我想测试下面的类 它使用React createRef api 不过 快速搜索并没有发现任何这样做的例子 有人成功过吗 我该如何嘲笑裁判 理想情况下我想使用shallow class Main extends React Component
  • Flot 库将 y 轴设置为最小值 0 和最大值 24

    如何将 y 轴设置在 0 到 24 的范围内 这是我的代码 j plot j placeholder d1 xaxis mode time min new Date 2010 11 01 getTime max new Date 2011
  • 是否可以在 React Native 中隐藏“BugReporting extraData”? (使用世博会)

    每次我使用 Expo 打开 React Native 应用程序时 我都会在控制台中收到大量消息 其中包含有关该应用程序的元数据 这实际上对我的调试没有多大帮助 特别是因为它每次都是相同的信息 并且每次应用程序重新加载时都会显示 即使是热重新
  • 如何获取没有背景的元素颜色?

    如何有效地获取没有背景但其父级之一有背景的元素的颜色 例如 这是 3 级深度设置 TOP1 为红色 TOP2 为绿色 TOP3 没有定义背景颜色 但它是绿色的 我编写一个函数来通过父母进行 iretate 并查找 backgroundCol
  • 如何在 next-auth 中将数据添加到客户端 API?

    我目前正在使用凭据提供程序使用 next auth 进行授权 我有会话正在运行并且用户可以登录等 但是 在会话中我需要使用客户端 API 用户 名字 姓氏传递一些数据 用户名和电子邮件 默认情况下 客户端 API 传递名称 电子邮件和图像
  • 在所有浏览器的 HTML 页面中嵌入 .wav 文件(无控件)

    我需要在单击按钮时播放一些 wav 文件 我找到了在 IE 中工作的解决方案 但它需要 Firefox 的 QuickTime 插件 还有其他办法吗 h1 test h1 span span
  • 有谁知道在 Angular 2 应用程序中使用的简单日期选择器?

    有谁知道在 Angular 2 应用程序中使用的简单日期选择器 我似乎无法让 jquery ui datepicker 工作 有谁知道一个容易实施的方法 我尝试过 html date 但它不适用于所有浏览器 我正在使用带有 html5 和
  • 有没有类似于 iOS 的 canOpenURL 来检查移动浏览器的 URL 方案? [复制]

    这个问题在这里已经有答案了 可能的重复 iPhone Safari 检查 JavaScript 是否支持 URL 方案 https stackoverflow com questions 627916 iphone safari check
  • 无法在适当的时间对域调用 dispose

    我有一个问题domain模块 目前 我正在尝试捕获请求中引发的任何未捕获的错误 使用express中间件和域 所有请求在调用之前都会通过此函数路由next并继续走正确的路线 app use req res next gt domain cr
  • Google Drive Realtime API 离线和同步支持

    我想构建一个移动 Web 应用程序 为协作持久数据提供透明的离线和同步支持 我正在考虑使用 Google Drive Realtime API 作为后端 API 对离线和同步的支持程度如何 它只是通过包含的 API 脚本 自动 工作 还是应
  • 我需要 Selenium JavascriptExecutor 通过 jquery 返回一个元素

    我对此束手无策 我确信答案很简单 但我就是想不出来 当我将其放入 google Chrome 的控制台时 我有一个 jquery 选择器可以完美地找到和元素 answer label contains Yes 现在我想用它来检索 WebDr
  • 如何比较jquery中的两个元素[重复]

    这个问题在这里已经有答案了 var a start gt div last child var b start gt div live 0 alert a b alert a b 它总是假的 如何在 jQuery 中比较两个元素 thank
  • 在 Angular 5 中,如何从父组件访问动态添加的子组件?

    我正在开发一个 Ionic Angular 5 项目 我需要动态加载一些组件 继动态组件加载器示例 https angular io guide dynamic component loader在 Angular 文档中 我能够成功加载组件
  • 生成两个日期内的随机日期数组的优雅方法

    我有一个日期选择器 其中显示两个月 我想在每个可见月份中随机选择 3 个日期 date datepicker minDate new Date dateFormat DD MM d yy constrainInput true before
  • 当数据 uri 太大时“噢,啪”

    我正在编写一个 chrome 扩展 它执行以下操作 使用以下命令将文件从网站下载到内存XMLHttpRequest 将附加数据添加到文件中 然后将结果进行 Base64 编码到变量中total encoded data 使用以下方式向用户提
  • Vue.js 中计算属性和普通数据的区别

    我观察到 当一个正常的财产来自data 和从它派生的计算属性通过事件传递 前者保持其反应性 而后者失去它 我为其设置了以下测试用例 也作为 JSFiddle https jsfiddle net christophfriedrich b27
  • 更改元素的顺序

    我正在创建一个浮动宽度的网站 用户在智能手机上使用从全高清分辨率到约 600 像素的屏幕 这似乎是一个不错的主意 这就带来了一个非常有趣的问题 当用户使用比最佳分辨率更小的分辨率时 页面的高度会增加很多 这意味着更改某些元素 例如某些图像

随机推荐