Situation One
<script><BR> var i; //全局变量<BR> //方法名是camel命名法<BR> //方法里面的变量是局部变量
<P> function sayHello(){<BR> var x=100;<BR> alert(x);<BR> x++;<BR> }<BR> sayHello(); //输出100<BR> alert(x); //报错,因为x是局部变量,访问不到<BR></script>
Situation Two
<script><BR>function sayHello(){<BR> var x=100;<BR> if(x==100){<BR> var y=x+1;<BR> alert(y); //输出101<BR> }<BR> alert(y); //也输出101,在方法内部,不存在块级作用域,在C#中就不可以了!!!
<P> for(var i=0;i<2;i++){<BR> alert(i)<BR> } //在for循环里面定义的变量是块级作用域<BR> alert(i); //因为i是局部变量,所以输出2
<P>}<BR>sayHello();<BR></script>
注:变量使用前可以不用var声明,这样的变量会被认为是“全局变量”,但很少这样用
关于undefined与null
有以下几种情况的,变量的值为undefined
1、变量定义,但没有赋值,则变量的值为undefined
2、调用的方法没有返回值,在返回的值为undefined
3、对象的属性值不存在,则返回值为undefined,如:document.ddd
Example1:
var xx;
var yy=null;
if(xx==yy){
alert('相等');
}
else{
alert('不等');
}
输出结果为相等,因为在进行if判断时,浏览器会对xx及yy进行值的判断,因为两者都没有具体的值,认为他们都是false。
如果if判断中换成===[全等于符号],则输出不等!因为===表示要求xx及yy的数据类型和值都要相同才可以!
Example2:
var xx=10
var yy='10';
if(xx==yy){
alert('相等');
}
else{
alert('不等');
}
输出相等,如果换成===,则输出不等
Example3:
var n='10';
switch(n){
case 10:
alert('数字');
break;
case '10':
alert('字符串');
break;
}
输出 字符串
switch中的判断要考虑类型
总结:if中的判断是判断数值,不考虑类型