// This example is from the book _JavaScript: The Definitive Guide_.    
// Written by David Flanagan.  Copyright (c) 1996 O'Reilly & Associates.
// This example is provided WITHOUT WARRANTY either expressed or implied.
// You may study, use, modify, and distribute it for any purpose.        

// First we illustrate copy by value
n = 1;            // variable n holds the value 1
m = n;            // copy by value:  variable m holds a distinct value 1

// Here's a function we'll use to illustrate pass-by-value.
// As we'll see, the function doesn't work the way we'd like it to.
function add_to_total(total, x)
{
    total = total + x;  // this line only changes the internal copy of total
}

// Now call the function, passing the numbers contained in n and m by value.
// The value of n is copied, and that copied value is named total within the
// function.  The function adds a copy of m to that copy of n.  But adding
// something to a copy of n doesn't affect the original value of n outside
// of the function.  So calling this function doesn't accomplish anything.
add_to_total(n, m);

// Now, we'll look at comparison by value.  
// In the line of code below, the literal 1 is clearly a distinct numeric
// value encoded in the program.  We compare it to the value held in variable
// n.  In comparison by value, the bytes of the two numbers are checked to
// see if they are the same.
if (n == 1) m = 2;      // n contains the same value as the literal 1.
