首页 > Js/Jquery

javascript作用域和作用域链简单介绍

发表于2015-07-17 16:23:03| --次阅读| 来源webkfa| 作者js,javascript

摘要:作用域和作用域链简单介绍:只要是一门程序语言,那么作用域就是一个不可逃避的问题,下面就通过实例简单介绍一下javascript的作用域和作用域链。在javascript中,作用域分为两种:1.全局作用域2.局部作用域。如何界定是何种作用域:1.定义在所有函数之外的变量是具有全局作用域。2.定义在函数...

作用域和作用域链简单介绍:

只要是一门程序语言,那么作用域就是一个不可逃避的问题,下面就通过实例简单介绍一下javascript的作用域和作用域链。

在javascript中,作用域分为两种:

1.全局作用域

2.局部作用域。

如何界定是何种作用域:

1.定义在所有函数之外的变量是具有全局作用域。

2.定义在函数之内的变量具有局部作用域,它的作用域就是变量所在的函数。

特别说明:所有末定义直接赋值的变量具有全局作用域。

作用域与作用域之间是可以层层包含的:

全局作用域可以包含局部作用域,局部作用域中又可以嵌套其他局部作用域,可以如此无限的嵌套下去。

面罗列几个实例加深一下对概念的理解:

实例一:

<script type="text/javascript">
 var x="全局变量x";
 var y="全局变量y";
   
 function myfunction()
 {
  var x="局部变量x";
  var z="局部变量z";
  alert(x);//弹出"局部变量x"
  alert(y);//弹出"全局变量y"
 }
   
 myfunction();
alert(z);//不能弹出内容。
</script>

在以上代码中,当执行myfunction()函数的时候能够分别弹出”局部变量x“和"局部变量y"。但是alert(z)不能弹出内容,因为z变量是定义在函数内的局部变量,不能够在函数体外使用。
从上面的代码可以对局部变量和全局变量有一个基本的了解,要特别主要的是,如果局部变量和全局变量同名,那么局部变量将会覆盖全局变量,具体原因在后面有介绍。
实例二:

<script type="text/javascript">
 var x="全局变量x";
 var y="全局变量y";
   
 function myfunction()
 {
  var x="局部变量x";
  var z="局部变量z";
  m="全局变量m";
  alert(x);//弹出"局部变量x"
  alert(y);//弹出"全局变量y"
 }
 myfunction();
 alert(m);//弹出"全局变量m"
</script>

在以上代码中,当执行myfunction()函数的时候能够分别弹出”局部变量x“和"局部变量y"。alert(m)能够弹出"全局变量m",尽管m是在函数体内声明并赋值的,但是并没有使用var关键字,所以变量m的作用域是全局的。
实例三:

<script type="text/javascript">
 var x="全局变量x";
 var y="全局变量y";
   
 function myfunction()
 {
  var x="局部变量x";
  var z="局部变量z";
  m="全局变量m";
  alert(x);//弹出"局部变量x"
  alert(y);//弹出"全局变量y"
  function innerfunction()
  {
    var xx="局部变量xx";
    alert(xx);//弹出"局部变量xx"
    alert(z);//弹出"局部变量z"
  }
  innerfunction();
  alert(xx)//无法弹出
 }
 myfunction();
 alert(m);//弹出"全局变量m"
</script>

以上代码中,进行了函数的嵌套,也就是实现了作用域的嵌套。运行结果这里就不一一介绍了,和上面原理是一样的,需要特别说明的是,alert(xx)之所以不能够弹出内容,因为xx变量的作用域是innerfunction()函数,并且在myfunction()函数和全局作用都没有关于xx变量的声明。
经过上面的几个实例以后,对作用域有了初步的了解,下面再来介绍一下javascript的变量的查找机制,就能明白为什么看起来同名的局部变量能够覆盖全局变量。
以实例三作为一个例子,innerfunction()函数的alert(z)语句,这个时候就首先在innerfunction()函数作用域内查找,如果不存在,则向上在myfunction()函数作用域中查找,如果有就弹出变量值,没有则继续向上查找,如此则形成了一个作用域链。
特别说明:在javascript中不具有块级作用域,例如for循环语句不能形成一个作用。

最原始地址是:http://www.softwhy.com/

相关文章

猜你喜欢

学到老在线代码浏览器 关闭浏览
友情链接: hao123 360导航 搜狗网址导航 114啦网址导航 博客大全
Copyright © 1999-2014, WEBKFA.COM, All Rights Reserved  京ICP备14034497号-1