When Does It Become a Closure?

As per the closure definition, if inner function accesses the variables of outer function, only then is it called a closure.

The following is not a closure:

var Counter = (function () {
        var i = 0;
        return { counter : i += 1 };
})();

And this one is just a function inside another function:

function outerFunction() {
  var itemA = 10;

  function innerFunction() {
    var itemB = 20;
  }
}

This, however, is a closure:

function outerFunction(itemC) {
  var itemA = 10;

  function innerFunction(itemD) {
    var itemB = 20;
    return itemA + itemB + itemC;
  }
  return innerFunction;
}

Different Ways of Writing a Closure

Using Function Declarations
function outerFunction(outerVariable1) {
  var outerVariable2 = 0;

  function innerFunction(innerVariable) {
    // Accessing outer and inner variables
  }
  return innerFunction;
}
Using Function Expressions
var outerFunction = function(outerVariable1) {
    var outerVariable2 = 0;

    var innerFunction = function(innerVariable) {
      // Accessing outer and inner variables  
    }
    return innerFunction;
}
Declare & Return Inline

Declaring and returning the function in one line is the common convention when using closures.

function outerFunction(outerVariable1) {
  var outerVariable2 = 0;
  
  return function innerFunction(innerVariable) {
    // Accessing outer and inner variables
  }
}
Assign Anonymous & Run Immediately
var innerFunc = (function() { 
  var outerVariable1 = 0;

  return function innerFunction() {
    outerVariable1 += val;
  }
})();