使用javascript定义变量的时候我发现了很多令人匪夷所思的问题。
首先是定义全局变量的方法:
1)使用var a =100;来定义,这种定义方法需要var a =100;出现在函数的外面。如果进入了函数内部就变成了局部变量了。
2)使用 a=100;直接定义,这样定义即使是在函数内部定义也会被识别为全局变量的,但是一定要让程序运行过a=100这句话后才被声明赋值,他的作用于是在运行过这句话之后。还有一点和var a =100;不同的地方
function func2() { alert(b); b=100; }
这个方法无法运行,但是改成下面这个方法就可以运行了
var a = 100; var b = 200; function func1(){ alert(a); var a= 500; alert(a); alert(b); }
func1();
输出的结果尽然为 undefine,500,200。
我已经定义了一个全局变量a并赋了100,但是在func1中的第一个alert竟然输出了undefine(声明但没赋值,要是没有声明第一个alert不会弹出来),这说明全局变量a在func1中并没有起到作用,如果去掉了func1中的var a=500,结果就会是100,100,500了,这样就对了,这就说明func1中定义的a影响了全局中的a,并使它无法再func1中起作用。但是这就有引出了一个新的问题,如果全局的a没有在func1中起到作用,那么为什么第一个alert(a)会输出undefine的呢?他的声明是在alert(a)之后的,按常理来判断应该是不会弹出任何界面的。这也就是说下面的var a=500这句话中a的声明是在func1运行前就已经声明好了,但是赋值确是在var a =500是才附上的。
所以说程序在调用函数是实现将函数中所有的变量声明先运行(声明和赋值在运行的时候分开了),然后逐行进行接下来的操作(包括声明之后的赋值)。这样一来就解释通了。