68 lines
1.2 KiB
JavaScript
68 lines
1.2 KiB
JavaScript
// a globally-scoped variable
|
|
var a=1;
|
|
|
|
// global scope
|
|
function one(){
|
|
alert(a);
|
|
}
|
|
|
|
// local scope
|
|
function two(a){
|
|
alert(a);
|
|
}
|
|
|
|
// local scope again
|
|
function three(){
|
|
var a = 3;
|
|
alert(a);
|
|
}
|
|
|
|
// Intermediate: no such thing as block scope in javascript
|
|
function four(){
|
|
if(true){
|
|
var a=4;
|
|
}
|
|
|
|
alert(a); // alerts '4', not the global value of '1'
|
|
}
|
|
|
|
|
|
// Intermediate: object properties
|
|
function Five(){
|
|
this.a = 5;
|
|
}
|
|
|
|
|
|
// Advanced: closure
|
|
var six = function(){
|
|
var foo = 6;
|
|
|
|
return function(){
|
|
// javascript "closure" means I have access to foo in here,
|
|
// because it is defined in the function in which I was defined.
|
|
alert(foo);
|
|
}
|
|
}()
|
|
|
|
|
|
// Advanced: prototype-based scope resolution
|
|
function Seven(){
|
|
this.a = 7;
|
|
}
|
|
|
|
// [object].prototype.property loses to [object].property in the scope chain
|
|
Seven.prototype.a = -1; // won't get reached, because 'a' is set in the constructor above.
|
|
Seven.prototype.b = 8; // Will get reached, even though 'b' is NOT set in the constructor.
|
|
|
|
|
|
|
|
// These will print 1-8
|
|
one();
|
|
two(2);
|
|
three();
|
|
four();
|
|
alert(new Five().a);
|
|
six();
|
|
alert(new Seven().a);
|
|
alert(new Seven().b);
|