Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有类似于返回函数的东西吗?_Javascript_Jquery - Fatal编程技术网

Javascript 有类似于返回函数的东西吗?

Javascript 有类似于返回函数的东西吗?,javascript,jquery,Javascript,Jquery,我有一个要求,即获取锚定标签id,并根据id确定要执行的函数。。那么,是否有任何符合以下代码的内容 function treeItemClickHandler(id) { a=findDisplay(id); a(); } 您可以将函数指定给变量,如下所示: 您还可以从函数返回函数指针-请参阅findDisplayid的return语句 function treeItemClickHandler(id) { var a= findDisplay; var other = a(id);

我有一个要求,即获取锚定标签id,并根据id确定要执行的函数。。那么,是否有任何符合以下代码的内容

function treeItemClickHandler(id)
{
 a=findDisplay(id);
 a();
}

您可以将函数指定给变量,如下所示: 您还可以从函数返回函数指针-请参阅findDisplayid的return语句

function treeItemClickHandler(id)
{
 var a= findDisplay;
 var other = a(id);
 other();
}

function findDisplay(id)
{
   return someOtherThing;
}

function someOtherThing()
{

}
当然,函数是JavaScript中的第一类对象。例如,可以创建一个对象映射,该对象包含对要调用的函数的引用:

var funcs = {
   'id1': function(){...},
   'id2': function(){...},
   ...
};

function treeItemClickHandler(id) {
    if(id in funcs) {
        funcs[id]();
    }
}
由于函数被视为任何其他值,您也可以从另一个函数返回它们:

function findDisplay(id) {
    // whatever logic here
    var func = function() {};

    return func;
}

函数是普通的javascript值,所以您可以传递它们,将它们重新分配给变量,并将它们用作参数值或函数的返回值。只要使用它们;到目前为止,您的代码是正确的。

您可以通过多种方式在ID和函数之间映射以调用

其中一个比较简单的方法是创建一个将ID映射到函数的对象,并找到要从该对象调用的函数。这本质上是一个外观更好的switch语句

例如:

function treeItemClickHandler(id)
{
    var idMap = {
        "some-id": findDisplay,
        "another-id": doSomethingElse
    };

    if (!idMap.hasOwnProperty(id)) {
        alert("Unknown id -- how to handle it?");
        return;
    }

    // Call the corresponding function, passing the id
    // This is necessary if multiple ids get handled by the same func
    (idMap[id])(id); 
}

function findDisplay(id)
{
    // ...
}

function doSomethingElse(id)
{
    // ...
}

我的意思是findDisplay返回一个函数,该函数作为另一个函数存储在a中。为什么不简单地检查id,然后使用switch或一些if-else语句执行一个基于该id的函数?@Felix:根据我的代码,你能解释一下吗,这对我来说是全新的。。而映射概念是很好的here@Abhishek:你想解释什么?@Felix:所以当FindDisplay返回a时,a将是一个函数,具体取决于映射。。其中a被FindDisplay返回的任何函数替换,并且可以像往常一样调用?@Abhishek:如果我理解正确,那么是的,基本上就是这样。没那么复杂。如果您有一个函数,您可以通过名称引用它并传递它。在函数引用后添加调用该函数。如上所示,您不一定需要调用函数才能得到函数,funcs[id]也会给您一个函数。@Felix:请看一下!谢谢每个1的答案都对我有帮助,你能给我一些解决方法吗?谢谢