Thomas Shelby
Thomas Shelby

Reputation: 1370

How to return value from anonymous function in js

I would like to return value from anonymous function. How can I assign returned value to $id variable in below code ?

$(document).on("click", '.delete-component', function(e) {
     return 4;
 });

 //$id in this scope should be equal 4

Upvotes: 8

Views: 15695

Answers (2)

rahpuser
rahpuser

Reputation: 1249

You need to specify what to do when asyn function or operation is reached, so usually a return when using callbacks is another callback...

function aux(param1, callback){
    // do whatever...
    $(document).on("click", param1, function(e) {
        // return 4;
        callback(4);
    });
}

and you would use it in you code as following:

// your context..
// operations 1.. 2..
aux('.delete-component', function(theReturnedValue){
    console.log(theReturnedValue); // 4
});

This is how callbacks 'return' values to an outer scope.

Upvotes: 4

Lukasz Marek Sielski
Lukasz Marek Sielski

Reputation: 424

One thing you have to be aware that you work here with asynchronous actions. Let's number lines in order of exaction (n means some high number far far later)

1]    $(document).on("click", '.delete-component', function(e) {
n+1]    return 4;
      });
2]    console.log('here');

What you did was attached listener to click. Click won't happen at the moment - it will happen when someone clicks. Therefore you will have access to it after click happens. You can do two things:

  1. Declare var in scope above.
  2. Forward value to callback

1) Example 1

var myValue = 0;
$(document).on("click", '.delete-component', function(e) {
     myValue = 4;
});

function abc() {
  console.log('myValue is equal to ' + myValue);
}

// if that line happen before clicking, value will be still 0
execture somewhen abc();

2) Example 2

$(document).on("click", '.delete-component', function(e) {
     doSomethingWithValue(4);
});

function doSomethingWithValue() {
  console.log('myValue is equal to ' + myValue);
}

You can also investigate $watch, especially Angular does here a lot work for you.

Upvotes: 2

Related Questions