150 likes | 301 Views
Julian on JavaScript: Functions. Julian M Bucknall, CTO. Functions are objects. Is an encapsulation of some code Can have properties and methods of it’s own Can appear as a parameter, can be returned from another function Like all objects, functions are passed by reference not value.
E N D
Julian on JavaScript: Functions Julian M Bucknall, CTO
Functions are objects • Is an encapsulation of some code • Can have properties and methods of it’s own • Can appear as a parameter, can be returned from another function • Like all objects, functions are passed by reference not value
Defining a function • Two main ways: • Function literal • var f = function(arguments) { … }; • var f = function optName(arguments) { … }; • Function statement • function f(arguments) { … }
Return value? • All functions return something • There is no void type • “return;” will return undefined • If no return statement • Function returns undefined • Unless it’s a constructor, called via new
Invocation • When invoked, all functions get two extra variables • this • <evil laugh> • arguments • The parameter values of the call as an array-like object
Invocation patterns • Method • Function • Constructor • “apply”
Method invocation • Defined as a method on an object • Called via that object • this points to the object containing the method • Like C#, really
Function invocation • Defined as a global function • Or, defined as an internal function • Called without reference to an object • this points to the Global Object • Catches everyone out
The Global Object • Has no name • Is where all unowned variables (primitives, objects, functions) end up as public properties • are visible to all code! • Browser sets up a special property called window to point to the Global Object • (window is a property of the Global Object)
Constructor invocation • Defined as normal function • Convention: Name has initial uppercase letter • Called with new keyword • this points to object being constructed • constructor property already set • Object constructed is returned by default • No need for return statement
“apply” invocation • Defined however you want • Called via the function’s apply method • Alternately: use the call method • You get to define the this object
Scope • Scope in JavaScript is by function • NOT braces as in C# • No block scope here • The this object stays with the outer function, inner functions get their own this (usually the Global Object) • Watch out for callbacks
Scope 2 • A variable declared in a function is visible throughout the function • Even before it’s lexically defined
Closures • The “yay!” to scope’s “ow!”
Julian M Bucknall ∙ CTO ∙ DevExpress @jmbucknall julianb@devexpress.com http://devexpress.com/julian