首页 > 代码库 > 分析javascript中作用域
分析javascript中作用域
1.javascript中的作用域
正如其他语言一样,在javascript中,变量的作用域也有全局和局部作用域的划分。
2.全局作用域
1)所有在最外层定义(非函数体内定义)的变量拥有全局作用域
2)直接赋值的变量,自动默认为全局作用域
<span style="font-size:18px;"> <script> //函数体外 var name = "第一个name"; //全局变量 sex = "女"; //全局变量,因为直接赋值操作 function test() { //函数体内 age = 56; //全局变量,因为没有加关键字var var name = "lucky"; } alert(name);//返回第一个name </script></span>
3)所有window对象的属性拥有全局作用域。例如window.name等
3.局部作用域
1)在函数体内部用var定义的变量,这里注意一下,只要在函数体内,无论在哪个地方,因为函数内涉及到嵌套函数,用var定义的变量就是局部变量,如果没有加关键字var的话,系统会自动默认为全局变量
<span style="font-size:18px;"> <script> function test() { var name = "lucky";//在函数体内,局部变量 alert(name); } test();//返回lucky </script></span>
4.全局作用域和局部作用域的区别
1)我们知道所谓的作用域就好比穿衣服一样,是可以层层嵌套的,最外层的永远是全局作用域,因为别人都可以看到你穿在外面的衣服。下面来看一个小例子。
<span style="font-size:18px;"> <script> var name = "名字"; //全局变量 var people = function () { var name = "张三"; //局部变量 height = 1.8; //全局变量 alert(name); //显示张三 alert(window.name); //显示名字 } people(); alert(height);//显示1.8 </script></span>
2)还是上述的例子,如果函数people中没有name这个变量,但是全局变量中有,又会发生什么变化呢?
<span style="font-size:18px;"> <script> var name = "名字"; //全局变量 var people = function () { height = 1.8; //全局变量 alert(name); //显示名字 alert(window.name); //显示名字 } people(); alert(height);//显示1.8 </script></span>
解释:正如上述所说,作用域是层层嵌套的。当在javascript中寻找一个变量的时候,首先会从当前的作用域开始寻找,如果找到则停止;反之则从函数的外层继续寻找。在这个例子中先从people这个函数中寻找变量name;当没有找到的时候,转到外层作用域中寻找,此时name为“名字”
3)还是上述的例子,我么再略微的修改一下。还是从当前people函数的作用域查找,而people定义了该变量,但是还未到使用该变量,所以返回undifined。注意,在作用域内的变量,不管在函数的哪里声明,javascript都会在函数运行前在作用域中包含该对象。
<span style="font-size:18px;"> <script> var name = "名字"; //全局变量 var people = function () { height = 1.8; //全局变量 alert(name); //显示undifined alert(window.name); //显示名字 var name = "张三"; //局部变量 } people(); alert(height);//显示1.8 </script></span>
5.小结
看了上述的几个例子,不知各位有没有搞懂。简单的说,只要能够区分局部变量和全局变量就oK了,另外在javascript中查找变量的时候,是遵从从里向外的原则,就这么简单。
分析javascript中作用域