Since eval is no longer used for several reasons, I'm dealing with some problems calling functions. So I'm making a "Function Caller" to replace eval. First of all: am I bringing back eval issuses like security, speed and debugging difficulties? Here is the testing code:
function globalFunc(p){
console.log("Run globalFunc: "+p);
}
var globalVarFunc = function(p){
console.log("Run globalVarFunc: "+p);
}
function ini(){
var varFunc = function(p){
console.log("Run varFunc: "+p);
}
//
funcCaller(function(p){ console.log("Run anonymous function: "+p); }, "anonymous");
funcCaller('function(p){ console.log("Run anonymous function: "+p); }', "anonymous");
funcCaller(globalFunc, "global function");
funcCaller("globalFunc", "global string");
funcCaller(globalVarFunc, "globalVarFunc function");
funcCaller("globalVarFunc", "globalVarFunc string");
funcCaller(localFunc, "local function");
funcCaller("localFunc", "local string");
funcCaller(varFunc, "local var function");
funcCaller("varFunc", "local var string");
//
function localFunc(p){
console.log("Run localFunc: "+p);
}
}
function funcCaller(func, p){
if(typeof(func)=="string"){
p += " as string";
try { window[func](p); } catch(e) {
console.log("Catch window error trying "+p) ;
try { this[func](p); } catch(e) { console.log("Catch this error trying "+p) }
}
} else if(typeof(func)=="function"){
p += " as function";
try { func(p); } catch(e) { console.log("Catch error trying "+p) }
} else {
console.log("Unknown situation: "+typeof(func)+" trying "+p);
}
}
The log result by Safari 5.1:
Run anonymous function: anonymous as function
Catch window error trying anonymous as string
Catch this error trying anonymous as string
Run globalFunc: global function as function
Run globalFunc: global string as string
Run globalVarFunc: globalVarFunc function as function
Run globalVarFunc: globalVarFunc string as string
Run localFunc: local function as function
Catch window error trying local string as string
Catch this error trying local string as string
Run varFunc: local var function as function
Catch window error trying local var string as string
Catch this error trying local var string as string
Maybe to run an anonymous function as string is not advisable, same problem as eval. But why "varFunc" doesn't work if "globalVarFunc" does?
EDIT: I wish at list to run "varFunc".