<html>
<head>
<title>variable scope</title>
</head> <body>
<script type="text/javascript">
var fristName = "abc";
lastName="def";
function ChangeName() {
document.write("Your old fristname is " + fristName + "<br>");
document.write("My old lastname is " + lastName + "<br>"); var fristName = "xyz";
lastName="opq";
}
ChangeName(); document.write("name :" + fristName, lastName ); </script>
</body>
</html>
为什么在函数中old fristName 会是undefined呢?
var fristName;
document.write("Your old fristname is " + fristName + "<br>");
document.write("My old lastname is " + lastName + "<br>"); fristName = "xyz";
lastName="opq";
}
换一下顺序,试试
function ChangeName() {
var fristName = "xyz";
document.write("Your old fristname is " + fristName + "<br>");
document.write("My old lastname is " + lastName + "<br>");
lastName="opq";
}
<html>
<head>
<title>variable scope</title>
</head> <body>
<script type="text/javascript">
var fristName = "abc";
lastName="def";
function ChangeName() {
var fristName = window.undefined;//声明提前,并且赋初值
document.write("Your old fristname is " + fristName + "<br>");
document.write("My old lastname is " + lastName + "<br>"); fristName = "xyz";
lastName="opq";
}
ChangeName(); document.write("name :" + fristName, lastName ); </script>
</body>
</html>
但是如果函数ChangeName中无var fristName = "xyz";则使用fristName = "abc";
lastName="def";
function ChangeName() {
document.write("Your old fristname is " + fristName + "<br>");
document.write("My old lastname is " + lastName + "<br>"); var fristName = "xyz";//预加载导致这个变量覆盖了外部变量,浏览器解释的时候认为changeName函数中有一个局部变量firstName。所以函数体内用到firstName时都是用的局部变量
lastName="opq";
}
ChangeName(); document.write("name :" + fristName, lastName );
预加载ChangeName这个函数时,会把后面声明的变量声明出来,不过不会赋值
LZ可以理解为, 先分析了function 和 var ,然后再逐行执行