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

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

只要是一门程序语言,那么作用域就是一个不可逃避的问题,下面就通过实例简单介绍一下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.51texiao.cn/javascriptjiaocheng/2015/0430/485.html

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

时间: 2024-10-14 19:51:22

javascript作用域和作用域链简单介绍的相关文章

JavaScript(JS)之简单介绍

JavaScript(JS)之简单介绍 一.JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名ScriptEase.(客户端执行的语言) Netscape(网景)接收Nombas的理念,(Brendan Eich)在其Netscape Navigator 2.0产品中开发出一套livescript的脚本语言.Sun和Netscape共同完成.后改名叫Javascript 微软随后模仿在其IE3.0

前端之JavaScript:JS简单介绍

JavaScript(JS)之简单介绍 一.JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名ScriptEase.(客户端执行的语言) Netscape(网景)接收Nombas的理念,(Brendan Eich)在其Netscape Navigator 2.0产品中开发出一套livescript的脚本语言.Sun和Netscape共同完成.后改名叫Javascript 微软随后模仿在其IE3.0

JavaScript中作用域和作用域链的简单理解(变量提升)

通过阅读<JS高级程序设计>这本书,对js中的作用域和作用域链知识有了初步的了解和认识,准备成笔记供大家参考,笔记中字数比较多,但个人认为叙述的挺详细的,所以希望读者耐心看.再者,本人了解的比较基础,不足的地方希望大家一起交流,共同学习. 1.执行环境(execution context) 执行环境定义了变量和函数有权访问的其他数据,决定了他们各自的行为.每个执行环境都有与之对应的变量对象(variable object),保存着该环境中定义的所有变量和函数.我们无法通过代码来访问变量对象,但

JavaScript 开发进阶:理解 JavaScript 作用域和作用域链

作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理.今天这篇文章对JavaScript作用域和作用域链作简单的介绍,希望能帮助大家更好的学习JavaScript. JavaScript作用域 任何程序设计语言都有作用域的概念,简单的说,作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期.在JavaScript中,变量的作用域有全局作用域和局部作用域两种. 1.  全局作用域(Global S

JavaScript作用域和作用域链

JavaScript 开发进阶:理解 JavaScript 作用域和作用域链 来源:梦想天空  http://www.cnblogs.com/lhb25/archive/2011/09/06/javascript-scope-chain.html 作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理.今天这篇文章对JavaScript作用域和作用域链作简单的介绍,希望能帮助大家更好的学习JavaScript. Java

关于Javascript作用域及作用域链的总结

本文是根据以下文章以及<Javascript高级程序设计(第三版)>第四章相关内容总结的. 1.Javascript作用域原理,地址:http://www.laruence.com/2009/05/28/863.html 2.JavaScript 开发进阶:理解 JavaScript 作用域和作用域链,地址:http://www.cnblogs.com/lhb25/archive/2011/09/06/javascript-scope-chain.html 在介绍有关作用域的内容之前,先来介绍

(转)JavaScript 开发进阶:理解 JavaScript 作用域和作用域链

作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理.今天这篇文章对JavaScript作用域和作用域链作简单的介绍,希望能帮助大家更好的学习JavaScript. JavaScript作用域 任何程序设计语言都有作用域的概念,简单的说,作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期.在JavaScript中,变量的作用域有全局作用域和局部作用域两种. 全局作用域(Global Scope

JavaScript 开发进阶:理解 JavaScript 作用域和作用域链(转载 学习中。。。)

作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理.今天这篇文章对JavaScript作用域和作用域链作简单的介绍,希望能帮助大家更好的学习JavaScript. JavaScript作用域 任何程序设计语言都有作用域的概念,简单的说,作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期.在JavaScript中,变量的作用域有全局作用域和局部作用域两种. 1.  全局作用域(Global S

理解 JavaScript 作用域和作用域链

作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域链的工作原理.今天这篇文章对JavaScript作用域和作用域链作简单的介绍,希望能帮助大家更好的学习JavaScript. JavaScript作用域 任何程序设计语言都有作用域的概念,简单的说,作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期.在JavaScript中,变量的作用域有全局作用域和局部作用域两种. 1.  全局作用域(Global S