user875234
user875234

Reputation:

How do you perform operations on an existing closure?

Creating the closure is easy but using it is confusing for me. Here is my closure. Once I have it I need to be able to call operations on it like doWork, calculateThis, doAnimation, etc. but there doesn't seem to be a way to access functions inside the closure.

function worker(input) {
    return function () {
        doWork = function () {
             alert("doing work");
        };
    }
}

function caller() {
    var myWorker = worker();
    myWorker.doWork(); // this fails
}

*The question you're asking appears subjective and is likely to be closed. - Thanks again stackoverflow

Upvotes: 1

Views: 39

Answers (2)

Didier Ghys
Didier Ghys

Reputation: 30666

You are trying to execute a method work() but in your example you return a function, not an object with a property "work".

Here's what you're probably after:

function worker(input) {
    return {
        work: function () {
            alert("doing work");
        };
    }
}

Upvotes: 1

Tomasz Nurkiewicz
Tomasz Nurkiewicz

Reputation: 340733

I believe this is what you are asking for:

function worker(input) {
    return {
        doWork: function () {
             alert("doing work");
        },
        doAnimation: function() {
             alert("animating");
        }
    }
}

You can now call it using your code:

var myWorker = worker();
myWorker.doWork();
myWorker.doAnimation();

Note that your code is not really using closures, but this one does:

function worker(input) {
    return {
        doWork: function () {
             alert("doing work: " + input);
        },
        doAnimation: function() {
             alert("animating: " + input);
        }
    }
}

var workerA = worker('A');
var workerB = worker('B');
workerA.doWork();
workerB.doAnimation();

Can you see the difference?

Upvotes: 4

Related Questions