diff options
| -rw-r--r-- | javascript.html.markdown | 36 | 
1 files changed, 18 insertions, 18 deletions
| diff --git a/javascript.html.markdown b/javascript.html.markdown index cc279b9a..9b87b022 100644 --- a/javascript.html.markdown +++ b/javascript.html.markdown @@ -104,9 +104,10 @@ false  // There's also null and undefined  null // used to indicate a deliberate non-value -undefined // used to indicate a value that hasn't been set yet +undefined // used to indicate a value is not currently present (although undefined +          // is actually a value itself) -// null, undefined, NaN, 0 and "" are falsy, and everything else is truthy. +// false, null, undefined, NaN, 0 and "" are falsy, and everything else is truthy.  // Note that 0 is falsy and "0" is truthy, even though 0 == "0".  /////////////////////////////////// @@ -142,7 +143,7 @@ myArray[1] // = 45  // JavaScript's objects are equivalent to 'dictionaries' or 'maps' in other  // languages: an unordered collection of key-value pairs. -{key1: "Hello", key2: "World"} +var myObj = {key1: "Hello", key2: "World"}  // Keys are strings, but quotes aren't required if they're a valid  // JavaScript identifier. Values can be any type. @@ -184,7 +185,7 @@ do {      input = getInput()  } while (!isValid(input)) -// the for loop is the same as C and Java:  +// the for loop is the same as C and Java:  // initialisation; continue condition; iteration.  for (var i = 0; i < 5; i++){      // will run 5 times @@ -210,12 +211,6 @@ function myFunction(thing){  }  myFunction("foo") // = "FOO" -// Functions can also be defined "anonymously" - without a name: -function(thing){ -    return thing.toLowerCase() -} -// (we can't call our function, since we don't have a name to refer to it with) -  // JavaScript functions are first class objects, so they can be reassigned to  // different variable names and passed to other functions as arguments - for  // example, when supplying an event handler: @@ -224,9 +219,16 @@ function myFunction(){  }  setTimeout(myFunction, 5000) +// Functions can also be defined "anonymously" - without a name: +var lowerFunction = function(thing){ +    return thing.toLowerCase() +} +lowerFunction("Foo") // = "foo" +// (note: we've assigned our anonymous function to a variable - if we didn't, we +// wouldn't be able to access it) +  // You can even write the function statement directly in the call to the other  // function. -  setTimeout(function myFunction(){      // this code will be called in 5 seconds' time  }, 5000) @@ -247,25 +249,23 @@ i // = 5 - not undefined as you'd expect in a block-scoped language      // in a web browser is always 'window'. The global object may have a      // different name in non-browser environments such as Node.js.      window.permanent = 10 -    // Or, as previously mentioned, we can just leave the var keyword off. -    permanent2 = 15  })()  temporary // raises ReferenceError  permanent // = 10 -permanent2 // = 15  // One of JavaScript's most powerful features is closures. If a function is  // defined inside another function, the inner function has access to all the -// outer function's variables. +// outer function's variables, even after the outer function exits.  function sayHelloInFiveSeconds(name){      var prompt = "Hello, " + name + "!"      function inner(){          alert(prompt)      }      setTimeout(inner, 5000) -    // setTimeout is asynchronous, so this function will finish without waiting -    // 5 seconds. However, once the 5 seconds is up, inner will still have -    // access to the value of prompt. +    // setTimeout is asynchronous, so the sayHelloInFiveSeconds function will +    // exit immediately, and setTimeout will call inner afterwards. However, +    // because inner is "closed over" sayHelloInFiveSeconds, inner still has +    // access to the 'prompt' variable when it is finally called.  }  sayHelloInFiveSeconds("Adam") // will open a popup with "Hello, Adam!" in 5s | 
