js作用域及作用域链概念理解及使用

JS作用域及作用域链概念理解及使用攻略

1. 作用域的概念

在JavaScript中,作用域是指变量、函数和对象的可访问范围。作用域规定了在代码中的哪些部分可以访问变量、函数和对象。理解作用域对于编写可维护和可扩展的代码非常重要。

JavaScript中有三种作用域:
- 全局作用域:在整个程序中都可以访问的变量和函数。
- 函数作用域:在函数内部定义的变量和函数,只能在函数内部访问。
- 块级作用域:在ES6中引入的概念,使用letconst声明的变量具有块级作用域,只能在声明的块内部访问。

2. 作用域链的概念

作用域链是指在JavaScript中,每个作用域都有一个关联的变量对象列表。当访问一个变量时,JavaScript引擎会按照作用域链的顺序从内到外查找变量,直到找到该变量或者到达全局作用域。

作用域链的构建过程:
1. 在函数创建时,会创建一个称为“变量对象”的特殊对象,用于存储函数内部的变量和函数声明。
2. 在函数执行时,会创建一个称为“活动对象”的对象,用于存储函数执行过程中的变量和函数。
3. 当访问一个变量时,JavaScript引擎首先在当前作用域的活动对象中查找,如果找不到,则沿着作用域链向上查找,直到找到该变量或者到达全局作用域。

3. 示例说明

示例1:全局作用域和函数作用域

var globalVariable = 'Global'; // 全局变量

function foo() {
  var localVariable = 'Local'; // 函数内部变量
  console.log(localVariable); // 输出:Local
  console.log(globalVariable); // 输出:Global
}

foo();
console.log(globalVariable); // 输出:Global
console.log(localVariable); // 报错:localVariable未定义

在上面的示例中,globalVariable是一个全局变量,可以在整个程序中访问。localVariable是在函数foo内部定义的变量,只能在函数内部访问。在函数内部,可以访问函数内部的变量和全局变量。在函数外部,只能访问全局变量。

示例2:作用域链的查找顺序

var globalVariable = 'Global';

function outer() {
  var outerVariable = 'Outer';

  function inner() {
    var innerVariable = 'Inner';
    console.log(innerVariable); // 输出:Inner
    console.log(outerVariable); // 输出:Outer
    console.log(globalVariable); // 输出:Global
  }

  inner();
}

outer();
console.log(globalVariable); // 输出:Global
console.log(outerVariable); // 报错:outerVariable未定义
console.log(innerVariable); // 报错:innerVariable未定义

在上面的示例中,inner函数内部可以访问到innerVariableouterVariableglobalVariable。在inner函数内部,首先在自己的活动对象中查找变量,找到了innerVariable。如果没有找到,就会沿着作用域链向上查找,找到了outerVariableglobalVariable。在outer函数外部,无法访问outerVariableinnerVariable,因为它们只在函数内部可见。

以上是关于JS作用域及作用域链概念的详细攻略,希望对你有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js作用域及作用域链概念理解及使用 - Python技术站

(0)
上一篇 2023年8月19日
下一篇 2023年8月19日

相关文章

  • idea如何取消所有断点

    如何取消所有断点 在使用IntelliJ IDEA进行调试时,我们可能会设置多个断点。但是,在某些情况下我们需要取消所有断点。本攻略将详细介绍如何取消所有断点,并提供两个示例说明。 解决方法 以下是取消所有断点的步骤: 打开“Debug”窗口。 点击“View Breakpoints”按钮。 在“Breakpoints”窗口,选择所有断点。 点击“Delet…

    other 2023年5月7日
    00
  • vue-cli4如何打包静态资源到指定目录

    为了将静态资源打包到指定目录,我们需要修改vue.config.js文件,并设置publicPath和outputDir属性。以下是详细的攻略: 第一步:创建vue.config.js文件 我们需要在项目根目录下创建vue.config.js文件,并在该文件中设置publicPath和outputDir属性。如果原来不存在该文件,可以通过如下命令创建: to…

    other 2023年6月27日
    00
  • 学习python编程发展前途

    学习Python编程发展前途 为什么学习Python编程很有前途? Python是一种高级语言,其代码易于阅读和理解,环境配置简单,同时它支持面向对象编程、函数编程、模块化编程等多种编程范式,是一种十分灵活且强大的编程语言。Python的应用范围非常广,从web开发、网络编程、数据分析、科学计算、机器学习、人工智能等应有尽有。和其他的编程语言相比,Pytho…

    其他 2023年4月16日
    00
  • Java数据类型分类与基本数据类型转换

    Java数据类型分类与基本数据类型转换 在Java中,数据类型可以分为两大类:基本数据类型和引用数据类型。其中,基本数据类型是Java语言核心API的基础,他们可以存储简单的数值或字符,而引用数据类型则是Java语言中较为复杂的数据类型,需要使用new关键字来进行实例化。本文将主要介绍Java基本数据类型分类与基本数据类型转换的相关知识。 Java基本数据类…

    other 2023年6月27日
    00
  • Mybatis Properties 配置优先级详解

    Mybatis Properties 配置优先级详解 1. 介绍 Mybatis 是一款优秀的持久层框架,广泛应用于 Java 开发中。在使用 Mybatis 进行开发时,我们可以通过配置 Properties 文件来设置框架的各种行为和属性。本攻略将详细讲解 Mybatis Properties 配置的优先级。 2. Properties 配置的优先级 M…

    other 2023年6月28日
    00
  • Sql 批量查看字符所在的表及字段

    SQL 批量查看字符所在的表及字段,涉及到字符所在的表及字段的查找,我们可以通过如下的步骤来实现: 使用information_schema系统表查询字符所在的表及字段名 构造动态 SQL 语句,实现具体功能 下面具体讲解如何通过以上步骤来实现 SQL 批量查看字符所在的表及字段的功能。 步骤1:使用information_schema系统表查询字符所在的表…

    other 2023年6月25日
    00
  • asp.net core封装layui组件示例分享

    asp.net core封装layui组件示例分享的完整攻略 在asp.net core开发中,封装layui组件可以帮助我们更好地组织代码和提高开发效率。本文将为您提供一份完整攻略,介绍如何封装layui组件,包括示例说明等。 概念介绍 layui layui是一款基于jQuery的前端UI框架,它提供了丰富的UI组件和工具,可以帮助我们快速构建Web应用…

    other 2023年5月5日
    00
  • Win10系统电脑鼠标点击文件夹没反应该怎么办?

    Win10系统电脑鼠标点击文件夹没反应该怎么办? 问题描述 在使用 Win10 系统的电脑时,有时候会出现点击文件夹没有反应的情况。这种情况可能会出现在多个文件夹中,并且也会影响到用户的正常使用体验。 可能原因 Windows Explorer 进程出现异常。 文件夹选项设置错误。 电脑存在病毒或恶意软件导致。 系统文件损坏。 解决方法 方法一:重启 Win…

    other 2023年6月27日
    00