开发者

Is there anything like return a function?

开发者 https://www.devze.com 2023-03-13 05:11 出处:网络
I have a requirement where I get the anchor tags id and based on the id I determine which function to execute.. so is there anything that suites below开发者_开发百科 code

I have a requirement where I get the anchor tags id and based on the id I determine which function to execute.. so is there anything that suites below开发者_开发百科 code

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


You can assign a function to a variable like so: You can also return a function pointer from a function - see the return statement of findDisplay(id).

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

function findDisplay(id)
{
   return someOtherThing;
}

function someOtherThing()
{

}


Sure, functions are first class objects in JavaScript. For example, you can create a map (an object) which holds references to the functions you want to call:

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

function treeItemClickHandler(id) {
    if(id in funcs) {
        funcs[id]();
    }
}

As functions are treated as any other value, you can also return them from another function:

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

    return func;
}


functions are normal javascript values, so you can pass them around, (re)assign them to variables and use them as parameter values or return values for functions. Just use them ;) Your code is correct so far.


You can map between ids and functions to call in a number of ways.

One of the simpler ones is to create an object mapping ids to functions, and find the function to call from that object (this is in essence a nicer-looking switch statement).

Example:

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)
{
    // ...
}
0

精彩评论

暂无评论...
验证码 换一张
取 消