Search icon CANCEL
Subscription
0
Cart icon
Your Cart (0 item)
Close icon
You have no products in your basket yet
Save more on your purchases! discount-offer-chevron-icon
Savings automatically calculated. No voucher code required.
Arrow left icon
Explore Products
Best Sellers
New Releases
Books
Videos
Audiobooks
Learning Hub
Free Learning
Arrow right icon
Arrow up icon
GO TO TOP
Learning  jQuery : Better Interaction Design and Web Development with Simple JavaScript Techniques

You're reading from   Learning jQuery : Better Interaction Design and Web Development with Simple JavaScript Techniques Better Interaction Design and Web Development with Simple JavaScript Techniques

Arrow left icon
Product type Paperback
Published in Jul 2007
Publisher Packt
ISBN-13 9781847192509
Length 380 pages
Edition Edition
Languages
Tools
Arrow right icon
Toc

Table of Contents (18) Chapters Close

Learning jQuery
Credits
About the Authors
About the Reviewers
Preface
1. Getting Started FREE CHAPTER 2. Selectors—How to Get Anything You Want 3. Events—How to Pull the Trigger 4. Effects—How to Add Flair to Your Actions 5. DOM Manipulation—How to Change Your Page on Command 6. AJAX—How to Make Your Site Buzzword-Compliant 7. Table Manipulation 8. Forms with Function 9. Shufflers and Rotators 10. Plug-ins 1. Online Resources 2. Development Tools 3. JavaScript Closures

The Great Escape


The plot thickens when function references come into play. Some languages, such as Pascal, do allow the use of inner functions for the purpose of code hiding, and those functions are forever entombed within their parent functions. JavaScript, on the other hand, allows us to pass functions around just as if they were any other kind of data. This means inner functions can escape their captors.

The escape route can wind in many different directions. For example, suppose the function is assigned to a global variable:

var globVar;

function outerFun() {
  function innerFun() {
    alert('hello');
  }
  globVar = innerFun;
}
outerFun();
globVar();

The call to outerFun() after the function definition modifies the global variable globVar. It is now a reference to innerFun(). This means that the later call to globVar() operates just as an inner call to innerFun() would, and the alert is displayed. Note that a call to innerFun() from outside of outerFun() still results in an error! Though the function has escaped by way of the reference stored in the global variable, the function name is still trapped inside the scope of outerFun().

A function reference can also find its way out of a parent function through a return value:

function outerFun() {
  function innerFun() {
    alert('hello');
  }
  return innerFun ;
}
var globVar = outerFun();
globVar();

Here, there is no global variable modified inside outerFun(). Instead, outerFun() returns a reference to innerFun(). The call to outerFun() results in this reference, which can be stored and called itself in turn, triggering the alert again.

The fact that inner functions can be invoked through a reference even after the function has gone out of scope means that JavaScript needs to keep referenced functions available as long as they could possibly be called. Each variable that refers to the function is tracked by the JavaScript runtime, and once the last has gone away the JavaScript garbage collector comes along and frees up that bit of memory.

lock icon The rest of the chapter is locked
Register for a free Packt account to unlock a world of extra content!
A free Packt account unlocks extra newsletters, articles, discounted offers, and much more. Start advancing your knowledge today.
Unlock this book and the full library FREE for 7 days
Get unlimited access to 7000+ expert-authored eBooks and videos courses covering every tech area you can think of
Renews at $19.99/month. Cancel anytime
Banner background image