我正在尝试编写一个将任何东西转换为函数的函数。该功能应如下工作:
function canEval(str){
try { eval(str); } catch (e){ return false; }
return true;
}
function toFunc(v){
if(typeof(v) == "function") return v;
if(typeof(v) == "string"){
if(
window[v] != undefined &&
typeof(window[v]) == "function"
) return window[v];
if(canEval(v))
return function(){eval(v)};
}
return function(){return v;};
};
此代码的问题是canEval
实际上评估了代码,在某些情况下我不希望代码(在字符串中)运行多次。目前它评估字符串以查看是否存在任何错误,如果不是,则将评估的代码(字符串)作为函数返回,然后在以后再次运行。
有没有什么方法可以测试代码是否可以在没有实际运行代码的情况下评估代码(没有错误)?或者将其隔离,以便在评估的代码(字符串)中发生的事情不会对当前文件产生任何影响?
答案 0 :(得分:1)
有人发布了一个有效但已将其删除的答案。所以这是一个有效的toFunc
,如上所述。
function toFunc(v){
if(typeof(v) == "function") return v;
if(typeof(v) == "string"){
if(
window[v] != undefined &&
typeof(window[v]) == "function"
) return window[v];
try {
return new Function(v);
}catch(e){}
}
return function(){return v;};
};
答案是在try-catch语句中使用Function
构造函数