HTML
<input type='text' id="log" />
的JavaScript
var f = function(){
if(console && console.log)
console.log('hello eval issue!');
}.toString();
var f1 = eval('('+f+')');
var logMsg = f1===undefined?'eval returns none':'eval returns function';
$('#log').val(logMsg);
eval调用返回FF和Chrome中的function()对象,但在IE8中返回undefined :( 可能是什么问题?如何在所有浏览器中获得相同的行为?
答案 0 :(得分:4)
如果真的想要这样做,你可以创建一个匿名函数,它将返回你需要的功能:
var f1 = eval("(function() {return " + f + ";})()");
编辑:甚至更简单(只需要让浏览器认为这是一个表达式,函数是该表达式的结果,所以我们可以使用comma operator):
var f1 = eval("0, " + f);
但您可能需要考虑使用将函数体作为字符串的Function constructor。