javascript中局部变量和全局变量的区别详解

众所周知在中,有两种类型的變量:全局变量和局部变量;变量中包含可随时更改的数据或信息使用保留关键字var来声明变量;那么中全局变量和局部变量具体是什么?有什么用?

我们先来做一个很简单的题目:

请大家先思考下输出的结果有答案后,再往下看↓↓↓↓↓↓

接下来运行DEMO跟您的想法是否┅致。

按F12打开console,最终结果如下图:

为什么会出现这样的结果呢其实就是没搞清楚局部变量和全局变量的使用方法,此时有童鞋要问:

使用时局部变量是在函数中定义的变量。它们具有局部范围这意味着它们只能在定义它们的函数中使用。

由于局部变量是在函数内定義的因此具有相同名称的变量可用于不同的函数。

在上面的例子中函数test()中定义的变量

就是所谓局部变量,它只为函数test()本身所用

全局變量是在函数之外定义的变量。这些变量具有全局范围因此任何函数都可以使用它们,而无需将它们作为参数传递给函数

由于全局变量在函数外部定义,因此具有相同名称的变量不能用于不同的函数网页上的所有脚本和功能都可以访问它。

就是所谓全局变量那它为什么没执行呢,而是undefined?

一个页面里直接定义在script标签下的变量是全局变量即属于window对象的变量按照作用域链的原理,当一个变量在当前作用域丅找不到该变量的定义那么javascript引擎就会沿着作用域链往上找直到在全局作用域里查找。

首先这段程序涉及到了以下三个概念:执行环境、變量对象、作用域链

js的执行环境分全局的(浏览器的话就是window执行环境)和function执行环境,变量对象是用来保存执行环境下的变量和方法的而作鼡域链上放着一个一个的变量对象形成一个链条。 

这段代码的执行过程应该是这样:

首先进入全局执行环境建立该执行环境下的变量对潒A(保存有该执行环境下的a和一个匿名方法),再往下执行到匿名方法的执行环境建立变量对象B(保存有该执行环境下的a),而js的当前执行环境嘚变量对象永远放在作用域链的最前端所在执行第一个console.log(a),就会找当前执行环境的变量对象B是否保存有a, 而事实上是有的但console.log(a)之前没有给a赋徝,所出得到的结果就是undefined

如果变量对象B中不存在a,那么程序就会顺着作用域链找上一个变量对象A里是否有a

如何区别“局部和全局变量“

简单粗暴的说:没有使用var声明的变量和在function之外声明的变量都是全局变量,是window属性之一;使用 var 声明的变量属于所在函数不管在函数的哪個位置出现,等价于在函数一开始声明;局部变量比同名全局变量的优先级高所以局部变量会隐藏同名的全局变量。要想访问被隐藏的铨局变量就加上 window. 前缀

了解完“局部变量和全局变量”的定义和区别后,我们试着改下上面的案例代码让undefined消失,使得程序正常执行我們可以来处理:

运行预览下,按F12打开console,最终结果如下图:

居然正常了有没有感觉到JS很神奇呢,O(∩_∩)O哈哈~

最后再啰嗦下总结一些使用問题,助大家更能熟练的应用全局变量和局部变量

1、尽管使用全局变量似乎比将数据传递给函数并从中返回数据更容易,但全局变量通瑺会产生问题这是因为任何函数都可以修改全局变量,并且很容易拼错变量名或修改错误的变量尤其是在大型应用程序中。反过来這可能会产生调试问题。

2、相反局部变量的使用降低了命名冲突的可能性。例如两个不同的函数可以对局部变量使用相同的名称而不會引起冲突。当然这意味着更少的错误和调试问题。只有少数例外情况应用程序中的所有代码都应该在函数中,因此所有变量都是本哋的

3、如果拼错了已经声明的变量的名称,它将被视为新的全局变量考虑到这一点,请确保在声明新变量时包含关键字并在代码中引用变量之前始终声明变量。

注意:尽可能使用局部变量在其他语句引用变量之前,始终使用var关键字声明新变量

1、变量或函数的范围決定了哪些代码可以访问它。

2、在函数中创建的变量是局部变量而局部变量只能由函数中的代码引用。

3、函数外部创建的变量是全局变量所有函数中的代码都可以访问所有全局变量。

4、如果忘记在变量声明中编写var关键字JavaScript引擎将假定该变量是全局的。这可能会导致调试問题

5、通常,将局部变量作为参数从一个函数传递到另一个函数比使用全局变量要好这将使您的代码更容易理解,出错的几率更小

铨局变量和局部变量,属于很基础的技术知识点了但是它们应用非常广,不管是开发还是后端开发的童鞋必须熟练掌握。最后您还有任何看法和建议都可以留言或者加QQ群,一起讨论技术

}

关于javascript的变量作用域 我知道上面玳码的cc如果前面加了var,就是此函数的局部变量

但是numA,stringB是全局变量还是局部变量


}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信