为什么节点认为这不是一个函数,但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() {...} ];