浅谈JavaScript作用域

 更新时间:2022年01月24日 14:47:06   作者:bear*6  
这篇文章主要介绍了JavaScript作用域详情,作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突,下面文章我们一起来了解更多的详细内容,需要的小伙伴也可以参考一下

一、作用域

通常来说,一段程序代码中所用到的名字并不总是有效和可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。作用域的使用提高了程序逻辑的局部性,增强了程序的可靠性,减少了名字冲突。

JavaScript(es6前)中的作用域有两种:

  • 全局作用域
  • 局部作用域(函数作用域)
  • 在ES6后,还有一个块级作用域,以后在详述。

1、全局作用域

作用于所有代码执行的环境(整个 script 标签内部)或者一个独立的 js 文件。

2、局部作用域

作用于函数内的代码环境,就是局部作用域。 因为跟函数有关系,所以也称为函数作用域。

例如:

  for(let i=0;i<100;i++){
       sum += i;
   }

二、变量的作用域

在JavaScript中,根据作用域的不同,变量可以分为两种:

  • 全局变量
  • 局部变量

1、全局变量

在全局作用域下声明的变量叫做全局变量(在函数外部定义的变量)。
全局变量在代码的任何位置都可以使用
在全局作用域下 var 声明的变量 是全局变量
特殊情况下,在函数内不使用 var 声明的变量也是全局变量(不建议使用)

2、局部变量

在局部作用域下声明的变量叫做局部变量(在函数内部定义的变量)
局部变量只能在该函数内部使用
在函数内部 var 声明的变量是局部变量
函数的形参实际上就是局部变量

3、全局变量和局部变量的区别

  • 全局变量:在任何一个地方都可以使用,只有在浏览器关闭时才会被销毁,因此比较占内存。
  • 局部变量:只在函数内部使用,当其所在的代码块被执行时,会被初始化;当代码块运行结束后,就会被销毁,因此更节省内存空间。

三、作用域链

根据在内部函数可以访问外部函数变量的这种机制,用链式查找决定哪些数据能被内部函数访问,就称作作用域链

  • 只要是代码,就至少有一个作用域
  • 写在函数内部的局部作用域
  • 如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域

例如:对下面的代码进行分析判断结果是几

function f1() {
    var num = 123;
    function f2() {
        console.log( num );
    }
    f2();
}
var num = 456;
f1();

分析如下图所示:

可知最终的结果为:123

同样,也可以采取就近原则的方式来查找变量最终的值。

到此这篇关于JavaScript作用域详情介绍的文章就介绍到这了,更多相关JavaScript作用域内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解HTML5 使用video标签实现选择摄像头功能

    详解HTML5 使用video标签实现选择摄像头功能

    这篇文章主要介绍了详解HTML5 使用video标签实现选择摄像头功能的相关资料,希望通过本文能帮助到大家,实现这样的功能,需要的朋友可以参考下
    2017-10-10
  • 微信小程序 支付简单实例及注意事项

    微信小程序 支付简单实例及注意事项

    这篇文章主要介绍了微信小程序 支付简单实例的相关资料,这里参考官方文档写的简单实例,并提出注意事项,需要的朋友可以参考下
    2017-01-01
  • js前端面试常见浏览器缓存强缓存及协商缓存实例

    js前端面试常见浏览器缓存强缓存及协商缓存实例

    这篇文章主要为大家介绍了js前端面试常见浏览器缓存强缓存及协商缓存示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • JavaScript高级之自定义异常

    JavaScript高级之自定义异常

    在JavaScript中所有的异常都是Error对象,遇到异常就会抛出一个Error对象,这个对象中包含错误的描述信息,通过JavaScript提供的异常处理语句,我们可以用结构化的方式来捕捉发生的错误,让异常处理代码与核心业务代码实现分离,需要的朋友可以参考一下
    2021-12-12
  • JavaScript Promise实现异步并发任务控制器

    JavaScript Promise实现异步并发任务控制器

    这篇文章主要为大家介绍了JavaScript Promise实现异步并发任务控制器示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Javascript闭包使用场景原理详细

    Javascript闭包使用场景原理详细

    这篇文章主要介绍了Javascript闭包的使用场景,  由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,闭包就是能够读取其他函数内部变量的函数。所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁,下面一起进入文化在哪个了解文章内容
    2021-11-11
  • JavaScript数组去重方案

    JavaScript数组去重方案

    这篇文章主要介绍了JS数组方案,先总结一下我们数组的方法:pop、push、shift、unshift、slice、splice、sort、reverse、concat、join、indexOf、lastIndexOf、map、forEach,下面文章将详细对他们做个详细介绍,需要的朋友可以参考一下
    2021-09-09
  • 手机浏览器 后退按钮强制刷新页面方法总结

    手机浏览器 后退按钮强制刷新页面方法总结

    这篇文章主要介绍了手机浏览器 后退按钮强制刷新页面方法总结的相关资料,需要的朋友可以参考下
    2016-10-10
  • JS前端使用canvas搞一个手势识别

    JS前端使用canvas搞一个手势识别

    这篇文章主要为大家介绍了JS前端使用canvas搞一个手势识别的实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • 微信小程序 数据绑定详解及实例

    微信小程序 数据绑定详解及实例

    这篇文章主要介绍了微信小程序 数据绑定详解及实例的相关资料,需要的朋友可以参考下
    2016-10-10

最新评论