如何在Google Apps Script中禁用函数内隐式全局变量声明?
解决方案
直接开启JavaScript严格模式即可实现你要的校验效果,操作方式很简单:在你当前.gs文件的所有代码最顶部加一行'use strict'; 即可。
开启严格模式后,所有未提前声明就直接赋值的变量,运行时会直接抛出ReferenceError,从根源上避免隐式生成全局变量的问题。
改造后的示例代码
'use strict'; // 必须放在整个文件的第一行才会生效 function f1(){ for(var idx=0;idx<length; idx++){ tmp1 = idx; // 运行到此处直接报错:ReferenceError: tmp1 is not defined } } function f2(){ Logger.log(tmp1); // 执行到此处也会抛出未定义错误 }
其他补充建议
- 如果你项目拆分了多个
.gs文件,需要在每个文件的顶部都单独加'use strict;',严格模式是按文件维度生效的。 - 目前Google Apps Script默认使用V8 runtime,完全支持严格模式的所有特性,不存在兼容性问题。
- 官方在线编辑器也可以开启静态语法提示:打开编辑器右上角的设置,勾选「显示语法建议」,未声明的变量在编码阶段就会被标黄提示,和严格模式配合可以做到编码+运行时双重校验。
- 日常编码建议优先用
let/const代替var声明变量,块级作用域的特性可以进一步降低变量泄漏、变量提升带来的问题。
内容的提问来源于stack exchange,提问作者Henry
相关产品推荐
相关产品推荐

