要弄清楚JavaScript的变量作用域,有以下几点是需要我们理解与记住的:
1,一个局部变量的名称可以与某个全局变量的名称相同,但这是两个完全不同的变量。因此,更改一个变量值不会影响另一个变量的值。在声明局部变量的函数内,只有该局部变量有意义。
2,当 JavaScript 运行函数时,首先查找所有的变量声明,并以未定义的初始值undefined创建变量。如果变量被声明时有值,那么该变量仍以未定义的值undefined初始化,并且只有在运行了声明时才被声明值取代(假如变量被声明),记住JavaScript是顺序执行语句的。
3,变量在脚本中的第一次出现是在声明中。变量在第一次用到时就设置于内存中,方便于后来在脚本中引用。使用变量之前先进行声明。可以使用 var 关键字来进行变量声明。如果在 var 语句中没有初始化变量,变量自动取 JavaScript 值 undefined。尽管并不安全,但声明语句中忽略 var 关键字是合法的 JavaScript 语句。这时,JavaScript 解释器给予变量全局范围的可见度,即为全局变量。
for example:
<script language="JavaScript">
window.onload=function(){
strYYYY = document.form1.YYYY.outerHTML; -------------声明语句未使用var关键字,则为全局变量。
var str = strYYYY.substring(0,strYYYY.length-9);
......
strDD = document.form1.DD.outerHTML; -------------声明语句未使用var关键字,则为全局变量。
var n = MonHead[new Date().getMonth()];
if(new Date().getMonth()==1 && isPinYear(y))
{
n++;
}
writeDay(n);
}
function writeDay(n)
{
alert(strDD); ---------------------输出<select name="DD"><option value="">选择日</option></select>
alert(str); ---------------------输出undefined
str = strDD.substring(0,strDD.length-9);
for(var i=1;i<(n+1);i++)
{
str += "<option value='"+i+"'>"+i+"</option>";
}
document.form1.DD.outerHTML = str + "</select>";
}
</script>