为什么 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() {...}
];
我正在处理一个更大的项目,它通过我配置的 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() {...}
];