A very short crash course in Modern Javascript. Learn about functions, objects, how to create objects from functions, clojures and modules.
Variables
var a; //defines a variable a that has the value of undefined
//which is a reserved word/value in js
var b = 1;
var c , d = 2, e, f = null; //multiple variables on one line
g = 10; //variables initialized without var will be global
//variables even if they are defined inside functions or
//code blocks {}.
//variables defined with var will have function scope: they
//will be available only in the function in which they are
//defined.
//Variables defined with var but outside of any function
//will be global variables.
//There is no block {} scope. All variables defined in a
//function will act as if they were defined at the top of
//the function.
var h == 1;
if (h == 1) {
var i = 2;
} else {
var j = 3; // no block {} scope. j is initialized before any code is
//executed.
};
console.log(j); //prints 3. j exists and is initialized even if the
//else branch is never executed.
Define an array
var fruits = []; //empty array var colors = ["blue", "red", "green"]; console.log(colors[1]); //prints red in console.
Define an object
var config = {}; //object without any properties.
var module = {"name" : "init", //string property.
"order": 1, //number property.
"children" : [], //array property.
activated : false, //you can skip "" from properties
//names if the name is not a
//reserved word.
"onStart" : function(){console.log("init started.")}
//function property a.k.a method.
};
console.log(module.name); //prints init.
console.log(module["name"]); //prints init. Objects can be accessed
//as if they were associative arrays.
var tmp = "name";
console.log(module[tmp]); //prints init.
Define a function
function run() {
console.log("clasic function definition");
};
run();
var run2 = function(){
console.log("variable-like function definition");
};
run2(); //in js functions are values like any other value. Because
//of this you can assign a function definition to a
//variable. Then you can call that function by using the
//variable's name.
//Because function can be stored in variables you can pass
//functions as arguments to another function or you can
//store functions as an object property.
var obj = {} //empty object
obj.doRun = run2; //define a method doRun and assign the
//function run2 to be used as the method.
obj.doRun(); //call the method/function run2. Notice the ().
Functions are objects
//although functions and objects are defined in different ways,
//internally js stores functions in objects. So when you do:
var sum = function(a, b) {return a + b};
//what actually happens is:
var sum = {prototype : -some object-,
code : -code to be runned when sum() si called:
function(a, b) {return a + b}-,
...
};
//So you see that js is building a special object that can store a
//function. Not sure about the actual name of the code property
//but it's a hidden property anyway (you can't access it from code).
//From the properties stored in this object, js knows if the object
//holds a function or if it's a regular object.
//Since functions are objects you can do with them everything that
//you can do with an object: assign it to a variable or pass it as an
//argument to another function.
-to be continued-