初学JS时,大部分可粗略知道,定义变量使用var,若定义变量时前边没有写var,则定义为全局变量
但遇到函数时,一些细节可能可能会影响变量的使用范围
下面通过实际案例说明:
a=6,b=8;
function func1(){
var a,b;
var p = '369';
p=="333" ? (a=1,b=2) : p=='666' ? (a=2,b=3) : p=="999" ? (a=3,b=4) : (a=4,b=5);
alert(a)
alert(b)
}
function func2(){
alert(a);
alert(b);
a=1,b=2
}
func1();
func2();
alert(a);
alert(b);
//上面的代码首先会弹出 4和5,然后弹出 6和8,最后弹出 1和2
解释:虽然外面定义了全局变量,但fun1函数内部再次使用var定义变量,导致变量a和b变为func1函数内的局部变量
因为在函数内部使用了“var”定义变量,所以函数里再次进行赋值时,不论有没有“var”,此时都已成为函数内的局部变量,归属权无法再改变
在func2函数中,没有定义a和b就直接使用,这时使用了外面定义的全局变量
函数末尾没有使用var,直接改变a和b的值,这等于修改全局变量的值,所以最后a和b的值变为1、2