首页 > 解决方案 > 未定义参考错误 const。我不明白为什么

问题描述

我有一个像这样的简单脚本

function importazione() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const wsd = ss.getSheetByName("morosi");
  wsd.getRange(2,1,1000,10).clearContent();
  SpreadsheetApp.flush();

  const ws = ss.getSheetByName("importa");
  const max_riga = ws.getLastRow();
  var dati = ws.getRange(2, 1, max_riga-1, 6).getValues();
  
  dati.forEach(r => {                  
    scriviElenco({
      corso: r[0],
      ciclo: r[1],
      studente: r[2],
      status: r[4],
      id_matr: r[5]
    });
  });
}

function scriviElenco(passa) {
  if (passa.status === "NO PAGÓ") {    
    var daSplittare = passa.corso+"|"+passa.studente+"|"+passa.id_matr;
    var riga = [];
    riga = daSplittare.split("|");
    wsd.appendRow(riga);
  };
}

它在最后一行返回此错误:

ReferenceError:未定义wsd

我不明白为什么没有定义 wsd 常量,我有更复杂的脚本,我在其中使用相同的定义并且它可以工作。有人可以帮我理解吗?

标签: constants

解决方案


我不明白为什么没有定义 wsd 常量

wsd不在您的第二个功能范围内,scriviElenco(); 它仅在范围内importazione()- 因为Javascriptconst定义具有块范围。这实际上是有道理的,因为wsd仅在您执行时设置importazione(),并且您不能期望它在第二个函数中具有有效值。因此,您可能必须编写如下内容:

function scriviElenco(passa) {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const wsd = ss.getSheetByName("morosi");
  // your existing implementation
}

甚至可能是一个单行辅助函数,例如:

function getSheet(sheetName) {
  return SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
}

您在这两个函数中的每一个函数的开头都将其分配给一个常量。


推荐阅读