为什么节点认为这不是一个函数,但JavaScript有时是好的?

我有一个更大的项目,我正在通过我configuration的API网关在AWS中调用Lambda。 在Lambda我试图dynamic调用基于API请求上的查询string参数通过使用以下variables:

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

不幸的是我得到一个错误

 TypeError: global[functionToCall] is not a function 

我已经重写了这个使用窗口来演示它在线和取决于我是否运行在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中,每个模块都有自己的作用域,而且你永远不会得到隐式的全局variables。

不要依赖string和全局variables,而应该直接创build一个函数数组:

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