Google Apps Script函数调用后返回值为null问题求助
Google Apps Script变量赋值问题排查与解决
我有一段Google Apps Script代码如下:
let jmlTUPDNet; function JmlhTransaksi (a,b) { let DataBruto = UserPageSheet.getRange(12,b,UserPageSheet.getLastRow(),1).getValues(); // Logger.log(DataBruto) let DataNetto = DataBruto.filter( innerArray => innerArray.join("") !== "" ); // console.log(DataNetto); a = DataNetto.length Logger.log(a) return a = DataNetto.length } JmlhTransaksi(jmlTUPDNet,1) Logger.log(jmlTUPDNet)
问题:函数内Logger.log(a)返回1,但外部执行Logger.log(jmlTUPDNet)却返回null。希望外部日志也能返回1,方便在其他函数中使用该值,请问哪里出错了?
问题根源
JavaScript里原始类型(数字、字符串、布尔等)是按值传递的,你把jmlTUPDNet作为参数传入函数时,只是把它的当前值(null)复制了一份给参数a,函数内部对a的赋值只会修改这个副本,不会影响外部的jmlTUPDNet变量。
修复方法
方法1:直接接收函数返回值(推荐)
既然函数已经返回了计算结果,直接把返回值赋值给外部变量即可:
let jmlTUPDNet; function JmlhTransaksi (b) { // 移除无用的a参数 let DataBruto = UserPageSheet.getRange(12,b,UserPageSheet.getLastRow(),1).getValues(); let DataNetto = DataBruto.filter(innerArray => innerArray.join("") !== ""); const result = DataNetto.length; Logger.log(result); return result; } // 将函数返回值直接赋值给外部变量 jmlTUPDNet = JmlhTransaksi(1); Logger.log(jmlTUPDNet); // 现在会输出1
方法2:使用对象传递(按引用传递)
如果一定要通过参数传递修改外部变量,可以把变量放在对象里(对象是按引用传递):
let jmlTUPDNet = { value: null }; function JmlhTransaksi (obj,b) { let DataBruto = UserPageSheet.getRange(12,b,UserPageSheet.getLastRow(),1).getValues(); let DataNetto = DataBruto.filter(innerArray => innerArray.join("") !== ""); obj.value = DataNetto.length; Logger.log(obj.value); return obj.value; } JmlhTransaksi(jmlTUPDNet,1); Logger.log(jmlTUPDNet.value); // 输出1
额外优化点
- 函数里的
return a = DataNetto.length可以简化为return DataNetto.length,无需先赋值再返回 - 用
const声明不需要修改的变量(比如示例中的result),提升代码可读性与稳定性
内容的提问来源于stack exchange,提问作者Platipusbiru
相关产品推荐
相关产品推荐

