为什么 Node 认为这不是一个函数,但有时 javascript 还可以?

Why does Node think this isn't a function but javascript is fine sometimes?

我正在处理一个更大的项目,它通过我配置的 API 网关在 AWS 中调用 Lambda。在 Lambda 中,我试图通过使用以下命令根据 API 请求的查询字符串参数动态调用变量:

var functionToCall = event.queryStringParameters.tech;
console.log("functionToCall is " + functionToCall);
global[functionToCall](event, output);

不幸的是我得到了一个错误

TypeError: global[functionToCall] is not a function

我使用 window 重写了它以在线演示它,并且根据我 运行 它是在 jsbin 还是 jsfiddle 中,我得到了不同的结果。以下在jsbin中有效:

'use strict';
var functionArray = ["one", "two", "three"];
var randFunction = functionArray[Math.floor(Math.random() * functionArray.length)];

function one() {
  console.log("function one called");
};

function two() {
  console.log("function two called");
};

function three() {
  console.log("function three called");
};

console.log(randFunction);
window[randFunction]();

当我在 jsfiddle 中 运行 它时,我得到

Uncaught TypeError: window[randFunction] is not a function
    at window.onload (VM99:49)

最终我正在寻找一些帮助 运行 在我的 Lambda(node.js) 中使用它,因为它会让事情变得更容易,也帮助我保持干爽。

谢谢!

在Node.js中,每个模块都有自己的作用域,你永远不会得到隐式全局变量。

与其依赖字符串和全局变量,不如直接创建一个函数数组:

var functions = [
  function() {...},
  function() {...},
  function() {...}
];