Set 3: AJAX Prep, Functions and this Standard Function function - - PowerPoint PPT Presentation

set 3 ajax prep functions and this standard function
SMART_READER_LITE
LIVE PREVIEW

Set 3: AJAX Prep, Functions and this Standard Function function - - PowerPoint PPT Presentation

IT452 Advanced Web and Internet Systems Set 3: AJAX Prep, Functions and this Standard Function function handleQuery() { var elems = [ "this", "is", "a", "new", "row" ]; insertRow(elems); return


slide-1
SLIDE 1

Set 3: AJAX Prep, Functions and this

IT452 Advanced Web and Internet Systems

slide-2
SLIDE 2

Standard Function

function handleQuery() { var elems = [ "this", "is", "a", "new", "row" ]; insertRow(elems); return false; } handleQuery();

slide-3
SLIDE 3

Fun with Functions (funcs1.html)

function handleQuery() { var elems = [ "this", "is", "a", "new", "row" ]; insertRow(elems); return false; } var mystery = handleQuery; mystery(); var anon = function(arg1) { var elems = [ "this", "is", "a", arg1, "row" ]; insertRow(elems); return false; } anon(“happy”);

slide-4
SLIDE 4

Nesting Functions (funcs2.html)

function randomFunc() { var rand = Math.random(100); var func = function() { return rand; } return func; } var number1 = randomFunc()(); var number2 = randomFunc()();

Does number1 == number2 ?

slide-5
SLIDE 5

Closure and Functions (funcs3.html)

function makeSomeFunctions() { var funcs = new Array(); for( var xx = 0; xx < 5; xx++ ) funcs[xx] = function() { document.writeln(“<p>My fave is “ + xx); } return funcs; } var myFuncs = makeSomeFunctions(); for( var ii = 0; ii < myFuncs.length; ii++ ) myFuncs[ii]();

What is the output? (func3.html)

slide-6
SLIDE 6

Closure and Functions

function makeSomeFunctions() { var funcs = new Array(); for( var xx = 0; xx < 5; xx++ ) funcs[xx] = function() { document.writeln(“<p>My fave is “ + xx); } return funcs; }

Variable xx is removed from the call stack when makeSomeFunctions() exits. The anonymous function depends on xx, what happens? A closure is created containing the local variables.

slide-7
SLIDE 7

Closure Picture

function makeSomeFunctions() { var funcs = new Array(); for( var xx = 0; xx < 3; xx++ ) funcs[xx] = function() { document.writeln(“<p>My fave is “ + xx); } return funcs; } var someFuncs = makeSomeFunctions();

function() { document.writeln(“<p>M y fave is “ + xx); } Global Variables Local to makeSomeFunctions xx

Closure

Tons of detail at jibbering.com/faq/notes/closures/

Function Scope Chain

slide-8
SLIDE 8

Closure Picture

function makeSomeFunctions() { var funcs = new Array(); for( var xx = 0; xx < 3; xx++ ) funcs[xx] = function() { document.writeln(“<p>My fave is “ + xx); } return funcs; } var someFuncs = makeSomeFunctions();

Loop 1: xx = 0 Loop 2: xx = 1 Loop 3: xx = 2 Loop 4: xx = 3 End Loop: xx = 4

function() { document.writeln(“<p>M y fave is “ + xx); } Global Variables Local to makeSomeFunctions xx

Closure

Tons of detail at jibbering.com/faq/notes/closures/

Function Scope Chain

slide-9
SLIDE 9

Anon Functions with Arguments

function makeSomeFunctions() { var funcs = new Array(); for( var xx = 0; xx < 5; xx++ ) funcs[xx] = function(arg) { document.writeln(“<p>My fave is “ + xx + “ with arg “ + arg + “</p>”); } return funcs; } var myFuncs = makeSomeFunctions(); for( var ii = 0; ii < myFuncs.length; ii++ ) myFuncs[ii](ii);

What is the output? (funcs4.html)

slide-10
SLIDE 10

Challenge Exercise

  • Change this code so I can call changeIt(integer) to

alter the variable xx in myFave():

function makeFunctions() { var xx = 3.14159; return function() { document.writeln(“<p>My fave is “ + xx); } } var myFave = makeFunctions; myFave(); changeIt(2.718); myFave();

Output: My fave is 3.14159 My fave is 2.71828

slide-11
SLIDE 11
  • Anon. Functions (funcs5.html)
  • Two functions can read and write the same

memory location.

  • Define two anonymous functions in the same local

context.

slide-12
SLIDE 12

This this is this. What is this? A reference to the owner of the current context. In a function? In an element property (e.g., onclick=“foo(this)”)?

slide-13
SLIDE 13

This this is this. (this1.html) <p onmouseover=“highlightme(this)”

  • nmouseout=“dehighlightme(this)”>…</p>
slide-14
SLIDE 14

This is tricky! <p onmouseover=“highlightme()”

  • nmouseout=“dehighlightme()”>…</p>

function highlightme() { this.style.color = “red”; }

slide-15
SLIDE 15

But look at this… (this2.html) function highlightme() { this.style.color = “red”; } var node = document.getElementById(“target”); node.onmouseover = highlightme;

slide-16
SLIDE 16

Exercise #2

  • What is the output?
  • See this3.html

– User clicks on the three text paragraphs in order

Click the following 3:

  • nclick=highlightme(this)
  • nclick=highlightmeNone()

Dynamically created, onclick=highlightmeNone