Take the 2-minute tour ×

I am wondering that javascript support to write the function inside another function, by one of blog. Is this really possible. In fact i have done code but doubt about this concept. please clear this concept. I a really confuse.

share|improve this question

5 Answers 5

up vote 32 down vote accepted

Is this really possible.


   function a(x) {    // <-- function
      function b(y) { // <-- inner function
        return x + y; // <-- use variables from outer scope
      return b;       // <-- you can even return a function.
   a(3)(4);           // == 7.
share|improve this answer
Hah, you updated it and now we match. –  altCognito Jul 9 '10 at 12:30
This method is called currying. –  Yekver Nov 29 at 21:45

The following is nasty, but serves to demonstrate how you can treat functions like any other kind of object.

var foo = function () { alert('default function'); }

function pickAFunction(a_or_b) {
    var funcs = {
        a: function () {
        b: function () {
    foo = funcs[a_or_b];

share|improve this answer
Great example. I would add that it's important to note that functions defined inside other functions only exist in that functions scope (unless, of course, you assign a global function to it, as per this example). –  Mike Sherov Jul 9 '10 at 12:27

Functions are first class objects that can be:

  • Defined within your function
  • Created just like any other variable or object at any point in your function
  • Returned from your function (which may seem obvious after the two above, but still)

To build on the example given by Kenny:

   function a(x) {
      var w = function b(y) {
        return x + y;
      return w;

   var returnedFunction = a(3);

Would alert you with 5.

share|improve this answer
This method is called currying. –  Yekver Nov 29 at 21:43

Not only can you return a function which you have passed into another function as a variable, you can also use it for calculation inside but defining it outside. See this example:

    function calculate(a,b,fn) {
      var c = a * 3 + b + fn(a,b);
      return  c;

    function sum(a,b) {
      return a+b;

    function product(a,b) {
      return a*b;

    document.write(calculate (10,20,sum)); //80
    document.write(calculate (10,20,product)); //250
share|improve this answer

Yes, is posible write and call a function nested in another function.

Try this:

function A(){
   function B();
   function B(){

share|improve this answer

Your Answer


