summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--javascript.html.markdown36
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