In javascript, functions are first-class objects. So you can use functions like any other variable:
//making an anonymous function, and assigning it to a variable var meep = function () { return 'meep'; }; //passing a function as a parameter [ 'moop' ].map( meep ); //['meep'] //assigning it in an object literal var weirdNoises = { 'meep' : meep, 'slarg' : function () { return 'slarg'; } }; weirdNoises.meep(); //'meep' weirdNoises.slarg(); //'slarg' //you can also return functions function meeper () { return meep; } function slarger () { return function () { return 'slarg'; }; } //meeper returns a function, so the second () means "execute the function // that was returned" meeper()(); //'meep' slarger()(); //'slarg'
As you can see, functions are like any other values. That way, you can define a default parameter, which will be a function, and override it, like everything else.
$.fn.weirdNoise = function ( options ) { var defaults = { makeNoise : function () { return 'Rabadabadaba'; }, isSilly : true }; return $.extend( defaults, options ); }; var raba = $( 'foobar' ).weirdNoise().makeNoise(); raba.makeNoise(); //'Rabadabadaba' raba.isSilly; //true var shaba = $( 'foobar' ).wierdNoise({ makeNoise : function () { return 'Shabadabadoo'; } }); shaba.makeNoise(); //'Shabadabadoo' shaba.isSilly; //true
A contrived example, but I think this illustrates the point.
Zirak source share