一文带你掌握JavaScript中的执行上下文和作用域

一文带你掌握JavaScript中的执行上下文和作用域

执行上下文(Execution Context)

执行上下文是JavaScript中一个重要的概念,它定义了代码执行时的环境和变量访问规则。每当JavaScript代码执行时,都会创建一个执行上下文。

执行上下文包含三个重要的组成部分:

  1. 变量对象(Variable Object):用于存储变量、函数声明和函数参数。在执行上下文创建时,会创建一个变量对象,并将变量和函数声明添加到该对象中。

  2. 作用域链(Scope Chain):用于解析变量和函数的访问权限。作用域链是一个由多个执行上下文的变量对象组成的链表结构,它决定了变量和函数的可见性。

  3. this值:指向当前执行上下文所属的对象。

作用域(Scope)

作用域是指变量和函数的可访问范围。JavaScript中有两种作用域:

  1. 全局作用域(Global Scope):全局作用域是在代码中任何地方都可以访问的作用域。在浏览器环境中,全局作用域是指window对象。

  2. 局部作用域(Local Scope):局部作用域是在函数内部定义的作用域。在函数内部定义的变量只能在函数内部访问。

下面是两个示例说明:

示例一:全局作用域和局部作用域

var globalVariable = \"I'm a global variable\";

function foo() {
  var localVariable = \"I'm a local variable\";
  console.log(globalVariable); // 可以访问全局变量
  console.log(localVariable); // 可以访问局部变量
}

foo();
console.log(globalVariable); // 可以访问全局变量
console.log(localVariable); // 无法访问局部变量,会抛出ReferenceError

在上面的示例中,globalVariable是一个全局变量,可以在任何地方访问。而localVariable是在函数foo内部定义的局部变量,只能在函数内部访问。

示例二:作用域链

var globalVariable = \"I'm a global variable\";

function outer() {
  var outerVariable = \"I'm an outer variable\";

  function inner() {
    var innerVariable = \"I'm an inner variable\";
    console.log(globalVariable); // 可以访问全局变量
    console.log(outerVariable); // 可以访问外部函数的变量
    console.log(innerVariable); // 可以访问当前函数的变量
  }

  inner();
}

outer();
console.log(globalVariable); // 可以访问全局变量
console.log(outerVariable); // 无法访问外部函数的变量,会抛出ReferenceError
console.log(innerVariable); // 无法访问内部函数的变量,会抛出ReferenceError

在上面的示例中,inner函数可以访问全局变量、外部函数outer的变量以及自身的变量。但是在外部函数outer和全局作用域中无法访问inner函数的变量。

希望这篇攻略能帮助你更好地理解JavaScript中的执行上下文和作用域。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一文带你掌握JavaScript中的执行上下文和作用域 - Python技术站

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

相关文章

  • MySQL8.0.21.0社区版安装教程(图文详解)

    MySQL 8.0.21.0社区版安装教程(图文详解) MySQL是一款流行的开源关系型数据库管理系统,它被广泛用于Web应用程序的开发和管理。在本篇文章中,我们将介绍MySQL 8.0.21.0社区版的安装过程,并提供图文详解。 下载MySQL 8.0.21.0社区版 首先,我们需要下载MySQL 8.0.21.0社区版,可以在MySQL官网(https:…

    other 2023年6月27日
    00
  • Shell脚本变量的只读 删除 类型及注释语法基础

    Shell脚本变量的只读、删除、类型及注释语法基础攻略 Shell脚本是一种用于自动化任务的脚本语言,变量是Shell脚本中非常重要的概念之一。在本攻略中,我们将详细讲解Shell脚本中变量的只读、删除、类型及注释语法基础。 变量的定义和赋值 在Shell脚本中,变量可以通过以下方式定义和赋值: variable_name=value 其中,variable…

    other 2023年8月15日
    00
  • TypeScript 类型编程之索引类型递归去掉可选修饰

    下面让我来详细讲解 TypeScript 类型编程中的索引类型递归去掉可选修饰的攻略。 什么是索引类型递归去掉可选修饰 在 TypeScript 中,选择性属性可以添加一个可选修饰符 ?,使属性变为可选。但有些情况下,我们需要去掉某些可选属性,使它们变为必填项,这时候就需要使用到索引类型递归去掉可选修饰符的方法。 具体而言,如果给定一个 TypeScript…

    other 2023年6月27日
    00
  • 微信小程序 教程之引用

    微信小程序教程之引用攻略 1. 引用的概念 在微信小程序中,引用是指在一个小程序中使用另一个小程序的功能或页面。通过引用,我们可以实现代码的复用,提高开发效率。 2. 引用的使用方法 2.1 引用小程序的页面 要引用另一个小程序的页面,需要在当前小程序的app.json文件中配置引用的小程序的usingComponents字段。示例如下: { \"…

    other 2023年8月20日
    00
  • codeblocks软件介绍

    codeblocks软件介绍 引言 Code::Blocks 是一个基于 C++ 和轻量级的集成开发环境 (IDE)。它能够支持多种编译器 (如 GCC, MSVC 和 Clang 等)以及多种操作系统。此外,Code::Blocks 工具是开源的,在 Apache License 2.0 下进行分发。 安装 Code::Blocks 工具可以从官方网站中下…

    其他 2023年3月28日
    00
  • 浅谈MyBatis原生批量插入的坑与解决方案

    浅谈MyBatis原生批量插入的坑与解决方案 背景 在许多项目中,对于大量数据的批量插入操作,我们通常采取的是 MyBatis 的批量插入的方式。但是在实际操作中,我们可能会遇到一些问题,例如数据插入失败、效率问题等,这时候我们就需要深入了解 MyBatis 原生的批量插入的相关知识点,来解决这些问题。 插入失败的原因分析 在使用 MyBatis 的原生批量…

    other 2023年6月26日
    00
  • jquery datatable服务端分页

    jQuery Datatable是一个基于jQuery的插件,它是一种表格控件,提供了丰富的功能,例如:分页、排序、搜索、过滤、分组、导出等。jquery datatable服务端分页就是将数据从服务端获取,分页显示在前端,而不是将所有数据一次性显示在前端,以提高数据处理效率。下面是jquery datatable服务端分页的完整攻略: 步骤一:引入jQue…

    other 2023年6月27日
    00
  • 关于vba代码运行时错误1004 应用程序定义或对象定义错误问题

    当我们在使用VBA编写代码自动化Excel时,有时会遇到运行时错误1004,这个错误提示一般会说“应用程序定义或对象定义错误”,但直接通过这个提示很难找出具体的问题所在。下面我将为您介绍如何解决这个问题的完整攻略: 确认代码的正确性 有时候运行时错误1004是由代码本身的错误引起的。我们需要确认以下几点: 是否有语法错误,例如缺少括号或引号等 是否正确引用了…

    other 2023年6月25日
    00
合作推广
合作推广
分享本页
返回顶部