Welcome back. Let me go through just one of those things.
'foo' can be the name of a function. It's the traditional geek name for 'any old function', just as 'x' is the traditional math name for 'any old number'. There are two ways you can name a function:
function foo() { alert( "I'm foo!" ); }
// very nearly the same:
var foo = function () { alert( "I'm foo, too!" ); }
Either way, 'foo' names a function, just as 'x = 2' names a variable. Now on to the parentheses. Normally parens specify grouping: '(3 - 2) - 1' does not come to the same value as '3 - (2 - 1)'. (Check my math!)
Parens also specify execution: 'foo()' means "run the 'foo' function". Functions return results. If you use an explicit 'return' statement that returns a value, 'foo()' yields that value.
function foo() { return 2; }
x = foo; // x is now another name for the function 'foo'
x = foo(); // x is now 2, the result of executing 'foo'
So watch those parens! They are a very big deal around functions.
Now back to your code:
window.onunload = hastaLavista; // assigns a function to the 'window.unload' event
window.onunload = hastaLavista(); // assigns 'undefined' to the event.
In the first case, the window is sitting there waiting for the 'unload' event to occur. When it happens, it says, "Hey! I've got a function that handles that!" and it runs the 'hastaLavista' function.
In the second case the parens caused the 'hastaLavista' function to execute. It has no return value (it shows the message, but doesn't return a value). It takes a 'return' statement to return a value from a function. So when the 'unload' event happens, the window says, "Hey! Wait a minute. I've got something for that." and then, "Oh shoot. All I've got is 'undefined'. Can't execute that." so nothing happens.
On another subject, 'window.status' should work, but take a good look for the status bar in Chrome. If you find it, let us know. (Chrome's rapidly overtaking MSIE in number of users and may pass Firefox next year. It's important.)