先上两段代码。这两段代码均运行于html5的环境中。
代码一
<script> var yourname="ITeYe"; myname="zhujiaojiao"; changeName(); function changeName(){ alert(yourname); //A alert(myname); //B } </script>
代码二:
<script> var yourname="ITeYe"; myname="zhujiaojiao"; changeName(); function changeName(){ alert(yourname); //C alert(myname); //D var yourname="beijibingshan"; myname="Fanny"; } alert(yourname); //E alert(myname); //F </script>
其中A,B,C,D,E,F分别输出的结果是“ITeYe”,“zhujiaojiao”,“undefined”,“zhujiaojiao”,“ITeYe”,“Fanny”。
试问问题一:为什么A处和C处输出的结果不一样?
试问问题二:为什么E处输出结果还是最初的值,而F处输出的却不是?
可以总结出这样的观点:
原来,“var”定义的是作用域上的一个变量,而没有'var'的标识符却可能是全局跟对象的一个属性,当代码运行在全局作用域的时候,作用域就是跟对象window,所有,有没有“var”都无所谓。当然,不同的javascript执行引擎可能有不同的实现方式,但都可以大致这么来理解。