非常简单的谷歌应用程序脚本中的意外行为

时间:2015-03-29 23:50:36

标签: google-apps-script google-sheets

所以这是我的谷歌应用程序脚本,顶部没有块注释:

function GET_POSITION(game,position) {
  defaultsheets=['Stats','Games','Calculations'];
  var sheets=SpreadsheetApp.getActiveSpreadsheet().getSheets();

  sheets.forEach(function(sheet) {
    name=defaultsheets.indexOf(sheet.getName())==-1;

    return false;
    if(name)
    {
      name='test';
    }
  });
  return name;
}

是的我知道,这是一个奇怪的脚本,它没有做任何事情。那是因为我一直在改变它,试图找出它为什么不起作用。

但这不是问题。我希望这个脚本返回false。 它没有,它返回true。但是当我删除“return false”时,它仍然不会运行if语句(它只是保持返回True)。

含义:

  • 返回false会被忽略吗?

  • name等于true,但在执行if(name)时,不执行if语句。

在表格的开头放置name =“test”将使该函数返回“test”。

我不知道为什么这个脚本会以这种方式运行。

1 个答案:

答案 0 :(得分:1)

好吧,哈哈,这个一个奇怪的脚本。当我第一次看到它时,我想,如果没有编译错误,它怎么能运行呢?变量name在闭包范围之外被调用,函数的其余部分不应该知道它的任何内容,它会给出未声明的变量错误。

然后我看到您没有使用var来初始化变量name。这使name表现得像一个全局常量。这肯定会给你意想不到的行为。这样做绝对没有充分的理由。

Declaring variables without var keyword

另一件事是只有匿名函数返回false。然后它跳出并返回name,它已设置为true。

What are Closures and Callbacks?

而且,我不得不问,你为什么要使用ALL_CAPS来命名函数?