我们来看看下面这两段代码:
<script> <script>
var msg = "全局变量"; var msg = "全局变量";
function show () function show ()
{ {
var msg;
msg = "局部变量"; msg = "局部变量";
} }
show(); show();
alert(msg); alert(msg);
</script> </script>
左边的结果是“局部变量”,右边的结果是“全局变量”
我们先来分析右边的代码:
定义一个变量var msg = "全局变量";然后程序就带着这个 msg = "全局变量";继续往下运行,接着就碰到了函数
function show () 函数不能被直接执行,所以程序这个时候不会执行这个函数里面的内容,而只是检查这个函数里面
的代码有没有写错的地方,然后程序就碰到了show();然后程序就会去执行show函数里面的代码,在这个
函数里面,我们声明了一个变量var msg = "局部变量";这个变量和前面的var msg = "全局变量";的变量名是相同的
定义一个变量 var msg = "全局变量,接着程序就碰到了function show () 函数,函数不能被直接执行,所以程序
都是msg,当程序碰到了函数内部自己声明的变量的时候,那么函数内部的变量就会覆盖掉和这个变量同名的
其他地方的变量,也就是说函数外边那个msg = “全局变量”一碰到函数里面自己定义的var msg = “局部变量”
程序会认为这两个是没有任何关系的变量,外边的msg会直接跳过函数里面的这个msg而去直接执行alert(msg);
弹出一个对话框,显示“全局变量”,函数当中的这个msg什么也没有作,因为主程序对函数的表用语句只是
show(),得到的结果就是msg等于“局部变量,可是函数内部的变量函数之外的代码是看不到的,所以这个
alert(msg)这个句子并没有执行函数里面的msg因为函数里面的msg对函数外边的代码是不可见的,也就是说函数
外边的代码看不见函数里面的代码,所以这个时候alert(msg)只能看到var msg = ”全局变量“,所以最后
弹出对话框显示的就是”全局变量“
这个时候不会执行这个函数里面的内容,而只是检查这个函数里面的内容有没有什么错误,接着程序会按照顺序
执行show(),然后程序就会带着var msg = ”全局变量“去执行show函数当中的语句,运行msg = "局部变量"; 在
这里这两个msg是重名的,我们之前说过,在函数之外定义的变量他的作用范围是在这条变量定义语句之后的所有
的javascript代码,包括这条变量声明语句之后的函数当中的代码,搜易当程序运行函数里边的代码的时候,因为
函数里边的msg前边没有加var,所以程序不会对这个函数里面的msg看不见,不会把这个函数里边的msg当成和
函数外边的这个msg毫无关系的两个变量,而是认为他们是同一个变量,所以,当程序调用函数里边的代码的时候
程序带着msg = "全局变量”碰到了msg = “局部变量”,也就是说程序先定义了msg等于全局变量,然后碰到了
msg等于局部变量,然后程序就按照函数里面说的修改了msg,让msg等于局部变量,这个时候这个msg就是局部
变量,然后程序就碰到了alert(msg),这里的msg指的就是被函数修改了值的msg,所以说在这个程序里
只有一个msg
所以说:
javascript中的全局变量的作用范围是在这个全局变量的声明语句之后的所有javascript
代码,但是在函数中的局部变量会覆盖掉和他同名的全局变量
下面我们来说一说null和undefined这两个类型
关于null和undefined这两个类型我们要记住null和undefined是一样一样的
举一个例子看看这两个值是否相等:
<script>
alert( undefined == null );
</script>
这段代码将会弹出一个对话框,显示true
这说明,undefined和null是一样的