JavaScript中使用eval()函数传递参数的方法

7

我该怎么做?

function myUIEvent() {
    var iCheckFcn = "isInFavorites";
    var itemSrc = ui.item.find("img").attr("src");

    if (eval(iCheckFcn(itemSrc))) { alert("it's a favorite"); }

function isInFavorites(url) { return true; } // returns boolean

2
你可能需要先编写语法正确的代码。你在其中某个地方缺少了一个闭合括号。 - Matt Ball
3个回答

8
首先,不要使用eval()
function myUIEvent() {
  var iCheckFcn = isInFavorites;
  var itemSrc = ui.item.find("img").attr("src");

  if (iCheckFcn(itemSrc)) { alert("it's a favorite"); }
}

函数是对象,你可以将一个函数的引用分配给任何变量。然后你可以使用该引用来调用该函数。

我认为您误解了问题的要点。您的示例仍将变量iCheckFcn硬编码为硬编码值isInFavorites。问题明确要求如何使用函数的名称动态设置iCheckFcn,而不是硬编码,而是作为一个变量传递(在他的示例中,称为var iCheckFcn,此时分配了一个硬编码字符串,但可以是动态传入的字符串)。 - Paul Gorbas
@PaulGorbas,您知道这已经超过6年了,对吧?无论如何,函数的引用可以作为参数传递,并且仍然不需要使用eval() - Pointy

2
最好的方法是Pointy所描述的方法,或者你可以这样做:
if ( window[iCheckFcn](itemSrc) ) {
  alert("it's a favorite");
};

-2
如果您正在使用AngularJS环境,那就很简单:
$rootScope.calculate = function(param1,param2)
{
    console.log(param1+param2);
}

var func = '$rootScope.calculate';
eval(func)(1,2);  //---> 3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接