Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Node认为这不是';不是一个函数,但javascript有时是好的?_Javascript_Node.js_Global_Aws Lambda - Fatal编程技术网

为什么Node认为这不是';不是一个函数,但javascript有时是好的?

为什么Node认为这不是';不是一个函数,但javascript有时是好的?,javascript,node.js,global,aws-lambda,Javascript,Node.js,Global,Aws Lambda,我有一个更大的项目,我正在工作,那就是通过我配置的API网关在AWS中调用Lambda。在Lambda中,我尝试使用以下命令,基于API请求上的查询字符串param动态调用变量: var functionToCall = event.queryStringParameters.tech; console.log("functionToCall is " + functionToCall); global[functionToCall](event, output); 不幸的是,我犯了一个错误

我有一个更大的项目,我正在工作,那就是通过我配置的API网关在AWS中调用Lambda。在Lambda中,我尝试使用以下命令,基于API请求上的查询字符串param动态调用变量:

var functionToCall = event.queryStringParameters.tech;
console.log("functionToCall is " + functionToCall);
global[functionToCall](event, output);
不幸的是,我犯了一个错误

TypeError: global[functionToCall] is not a function
我已经用窗口重写了它,以在线演示它,根据我是在jsbin还是JSFIDLE中运行它,我会得到不同的结果。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]();
当我在JSFIDLE中运行它时

Uncaught TypeError: window[randFunction] is not a function
    at window.onload (VM99:49)
最终,我希望在Lambda(node.js)中运行它时能得到一些帮助,因为它会让事情变得更简单,也能帮助我保持干爽


谢谢

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

您不应依赖字符串和全局变量,而应直接创建函数数组:

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

JSFIDLE将代码包装在函数中,因此变量不是全局变量。@FelixKling这很有意义。谢谢你的澄清!你能不能再扩展一点,并提供一个例子?谢谢!我是否可以利用一系列函数请求,这样我就可以在其他地方获得每个函数请求的代码?如果不是,那么使用命名函数时数组的外观如何?另外,我是否能够通过
函数[event.queryStringParameters.tech]
引用它们;你可以把你想要的任何东西做成一个数组。如果要按名称而不是索引引用,请使用对象。@SLaks谢谢!我遇到了一个问题,其中有
var函数={“foo”:foo(事件,输出),“bar”:bar(事件,输出)}实际调用函数,而不是创建供我稍后调用的对象。我做错了什么?@metropolis:你在调用函数。如果要传递函数,则需要传递调用函数的函数表达式。