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

Unexpected behaviour in really simple google apps script

所以这是我的 google 应用脚本,上面没有块注释:

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;
}

是的,我知道,这是一个奇怪的脚本,它不起作用 anything.That 是因为我一直在更改它,试图找出它不起作用的原因。

但这不是问题所在。我希望这个脚本 return false。 它没有,它 return 是真的。但是当我删除 "return false" 它仍然不会 运行 if 语句(它只是保持 returning True)。

含义:

将 name="test" 放在 sheet 的开头将使函数 return "test".

我不知道为什么这个脚本会这样运行。

嗯,哈哈,这个一个奇怪的脚本。初看的时候心想,这连运行怎么可能没有编译错误呢?变量 name 在闭包范围之外被调用,函数的其余部分不应该知道它,它会给出一个未声明的变量错误。

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

Declaring variables without var keyword

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

What are Closures and Callbacks?

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