我提出了以下逻辑,这似乎是错误的
function test() {
return 'hello';
}
function getFn(whichFn) {
var Fn = new Function(whichFn);
return (Fn());
}
var testResult = getFn('test()');
console.log(testResult);
我希望输出'hello',但是我却变得未定义
答案 0 :(得分:0)
改为使用return window[whichFn].call();
,并且不要将函数调用括号传递给getFn
:
function test() {
return 'hello';
}
function getFn(whichFn) {
return window[whichFn].call();
}
var testResult = getFn('test');
console.log(testResult);
答案 1 :(得分:0)
'test()'
您的函数没有return
语句,因此它始终返回undefined
。
function test() {
return 'hello';
}
function getFn(whichFn) {
var Fn = new Function(whichFn);
return (Fn());
}
var testResult = getFn('return test()');
console.log(testResult);
但是不要这样做。从字符串生成函数几乎总是解决使用闭包或变量更好地解决问题的方法:
function test() {
return 'hello';
}
function getFn(whichFn) {
return window[whichFn]();
}
var testResult = getFn('test');
console.log(testResult);
答案 2 :(得分:0)
尝试一下
function test() {
return 'hello';
}
function getFn(whichFn) {
var Fn = new Function(whichFn);
return (Fn());
}
var testResult = getFn('return test()');
console.log(testResult);
答案 3 :(得分:-1)
@killair嗨,我继续将其修改为ES6
const test = () => {
return 'it works';
}
const getFn = (whichFn) => {
return whichFn();
}
var testResult = getFn(test);
console.log(testResult);