码迷,mamicode.com
首页 > 编程语言 > 详细

JavaScript中的作用域和作用域链(边学边写)[看着别人的博客纯手敲]

时间:2017-12-15 22:45:27      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:标准   dos   nbsp   范围   function   生命周期   函数对象   oba   等等   

作用域是JavaScript最重要的概念之一,想要学好JavaScript就需要理解JavaScript作用域和作用域的工作原理。今天这篇文章对JavaScript作用域和作用域链简单的介绍,希望能帮助大家更好的学习JavaScript。

JavaScript作用域

  任何程序设计语言都有作用域的概念,简单的说,作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期。在JavaScript中,变量的作用域有全局作用域和局部作用域两种。

1.全局作用域(Global Scope)

在代码中任何地方都能访问到的对象拥有全局作用域,一般来说以下几种情形拥有全局作用域:

(1)最外层函数和最外层函数外面定义的变量拥有全局作用域,例如:

              var authorName="别散客人";
			function doSomething () {
				var blogName="Alidece";
				function innerSay () {
					alert(blogName);
				}
				innerSay();
			}
			alert(authorName);//别散客人
			alert(blogName);//错误
			doSomething();//Alidece
			innerSay();//出错

(2)所有未定义直接赋值的变量自动声明为拥有全局全局作用域,例如:

 

function doSomething () {
				var authorName ="Alidece";
				blogName = "Alidece";
				alert(authorName);
			}
			doSomething();
			alert(blogName);
			alert(authorName);//authorName is not defined

  (3)所有window对象的属性拥有全局作用域

一般情况下,window对象的内置属性都拥有全局作用域,例如window.name、window.location、window.top等等。

1.局部作用域(local Scope)

和全局作用域相反,局部作用域一般只在固定的代码片段内可以访问到,最常见的例如函数内部,所有在一些地方也会看到有人把这种作用域称为函数作用域,例如下列代码中的blogName和函数innerSay都只拥有局部作用域。

function doSomething () {
				var blogName="Alidece";
				function innerSay () {
					alert(blogName);
				}
				innerSay();
			}

  作用域链(Scope chain)

在JavaScript中,函数也是对象,实际上,JavaScript里一切都是对象。函数对象和其它对象一样,拥有可以通过代码访问的属性和一系列仅供JavaScript引擎访问的内部属性。其中一个内部属性是[[Scope]],有ECMA-262标准第三版定义,该内部属性包含了函数被创建的作用域中对象和集合,这个集合被称为函数的作用域链,它决定了哪些数据能被访问。

当一个函数创建后,它的作用域链会被创建次函数的作用域中可访问的数据对象填充。例如定义下面这样一个函数:

技术分享图片
function add (num1,num2) {
                var sum = num1+num2;
                return sum;
            }
View Code

在函数add创建时,它的作用域中会填入一个全局对象,该全局对象包含了所有对象变量,如下图所示(注意:图片例举了全部变量中的一部分):

 

技术分享图片

未完待续。。。。

 

JavaScript中的作用域和作用域链(边学边写)[看着别人的博客纯手敲]

标签:标准   dos   nbsp   范围   function   生命周期   函数对象   oba   等等   

原文地址:http://www.cnblogs.com/alideai/p/8044957.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!