1. 变量声明部分
If you attempt toread the value of an undeclared variable, JavaScript will generate an error. Ifyou assign a value to a variable that you have not declared with var,JavaScript will implicitly declare that variable for you. Note, however, thatimplicitly declared variables are always created as global variables, even ifthey are used within the body of a function. To prevent the creation of aglobal variable (or the use of an existing global variable) when you meant tocreate a local variable for use within a single function, you must always usethe var statement within function bodies. It's best to use var for allvariables, whether global or local. (The distinction between local and globalvariables is explored in more detail in the next section.)
如果变量没有先被var声明,而直接赋值,会自动产生声明一个全局变量,
但是如果没有声明,而直接读取的话会抛出一个错误。
2. 变量作用域
Within the body of afunction, a local variable takes precedence over a global variable with thesame name
在函数内部,局部变量优先级高于全局变量。
3. 小心全局变量和局部变量重名
All variablesdeclared in a function, no matter where they are declared, are defined throughout the function
var scope ="global";
function f( ) {
alert(scope); // Displays "undefined", not"global"
var scope = "local"; // Variable initialized here, but definedeverywhere
alert(scope); // Displays "local"
}
f( );
var scope ="global";
function f( ) {
alert(scope); // Displays "global"
}
f( );
You might think that the first call to alert( ) would display "global", since the varstatement declaring the local variable has not yet been executed. Because ofthe scope rules, however, this is not what happens. The local variable isdefined throughout the body of the function, which means the global variable bythe same name is hidden throughout the function. Although the local variable isdefined throughout, it is not actually initialized until the var statement isexecuted. Thus, the function f in the previous example is equivalent to thefollowing:
function f( ) {
var scope; // Local variable is declared at thestart of the function
alert(scope); // It exists here, but still has"undefined" value
scope = "local"; // Now we initialize it and give it a value
alert(scope); // And here it has a value
}