js 执行上下文和作用域的相关总结

yizhihongxing

JS执行上下文和作用域相关总结

在JavaScript中,代码执行的上下文和作用域是非常重要的概念。正确理解和应用它们可以帮助我们更好地编写和调试JavaScript代码。下面是一个总结:

执行上下文

执行上下文是JavaScript代码执行的环境,其中包括当前执行的代码、变量和对象等,JS 中有三种不同类型的执行上下文:全局上下文,函数上下文,eval上下文。

全局上下文

当JS代码在全局范围内执行(在脚本文件或全局函数中)时,将创建一个全局执行上下文。全局执行上下文会被赋值一个全局对象,可以用关键字this来引用全局执行上下文中的变量和函数。

函数上下文

当调用函数时,将创建一个新的函数执行上下文。函数执行上下文包括函数的参数,局部变量和内部函数。每当调用一个新的函数时,就会创建一个新的函数执行上下文,并将其添加到调用堆栈(Call Stack)。

eval上下文

eval函数也会创建一个新的执行上下文。但是,由于eval函数具有安全隐患,因此在大多数情况下不推荐使用eval。

作用域

在JavaScript中,作用域指的是代码中变量和函数被声明后的可访问范围。

全局作用域

在全局范围内声明的变量和函数具有全局作用域,因此它们可以在代码的任何位置访问。

函数作用域

在一个函数内声明的变量和函数具有函数作用域。这意味着它们只能在函数内部访问。

块级作用域

在ES6中,引入了块级作用域,这为我们提供了新的变量声明方式let和const。块级作用域允许变量在限定范围内声明,而不是在函数或全局作用域中。

示例说明

示例一

var x = 10;

function foo() {
  var y = 20;
  console.log(x);  // 输出:10
}

foo();
console.log(y);  // 抛出异常:Uncaught ReferenceError: y is not defined

在上面的示例中,x具有全局作用域,因此可以从函数内部访问。而变量y则在函数内部声明,具有函数作用域,只能从函数内部访问,因此在函数外部访问y会抛出一个引用错误。

示例二

function bar() {
  var x = 10;

  function baz() {
    var y = 20;
    console.log(x + y);  // 输出:30
  }

  baz();
}

bar();

在这个示例中,函数baz嵌套在函数bar中,并且可以访问在外部函数中声明的变量。当调用外部函数bar时,将创建一个函数上下文,并将其添加到调用堆栈中。然后当调用函数baz时,将创建一个嵌套的函数执行上下文,并将其添加到调用堆栈中。在baz内部,它可以访问外部函数bar中声明的变量,因为它们在同一个作用域中。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js 执行上下文和作用域的相关总结 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 深入浅析javascript继承体系

    深入浅析JavaScript继承体系 1. 继承的概念 在JavaScript中,继承是指一个对象获得另一个对象的属性和方法。这种被继承的对象称为父类或基类,继承它的对象称为子类或派生类。继承是面向对象编程中最基本的概念之一,也是JavaScript中的重要概念。 2. 继承的实现方式 在JavaScript中,实现继承有多种方式,常见的包括原型链继承、构造…

    JavaScript 2023年6月10日
    00
  • vue升级之路之vue-router的使用教程

    在Vue.js开发项目中,Vue Router是一个不可或缺的库。它为我们提供了一种方便的方式来管理应用程序的的路由和控制页面的显示内容。本文将提供“Vue升级之路之Vue Router的使用教程”,供大家参考。 安装Vue Router 我们可以使用npm来安装Vue Router,使用以下命令: npm install vue-router 创建Vue …

    JavaScript 2023年6月11日
    00
  • js程序中美元符号$是什么

    美元符号 $ 在 JavaScript 中代表一个函数或对象。在 jQuery 库中,$ 代表 jQuery 函数,因此 $ 变得非常常见。在许多网站和 Web 应用程序中,如果你想使用 jQuery 库中的函数,则必须首先使用 $ 变量。下面是一个示例代码片段: $(document).ready(function(){ $("button&qu…

    JavaScript 2023年6月10日
    00
  • js中如何完美的解析数据

    首先,在JavaScript中解析数据的主要方式是使用JSON对象。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,被广泛用于Web应用程序中的数据传输。以下是解析数据的完整攻略: 使用JSON.parse()方法解析数据 通过使用JavaScript的JSON.parse()方法,可以将一个字符串…

    JavaScript 2023年5月27日
    00
  • 浅谈golang的http cookie用法

    浅谈golang的http cookie用法 什么是Cookie? HTTP协议是无状态的,也就是说,当客户端加载一个页面或者访问一个接口时,服务器并不知道这个请求与之前的请求之间有关系,而Cookie就是为了解决这个问题的,它可以把一些关键性的信息,如用户的登录状态等,保存在客户端,以便在后续的请求中向服务器传递这些信息。 Cookie有两种类型,分别是s…

    JavaScript 2023年6月11日
    00
  • 详解JS模块导入导出

    下面是详解JS模块导入导出的完整攻略。 什么是模块 在JavaScript中,模块(Module)指的是一个独立的、可复用的代码块,类似于传统的库(Library)。模块的引入可以将一个大的代码块分成多个小的代码块,这样便于结构化编程、提高代码复用性、隔离变量作用域等。 模块的导入导出 JavaScript中的模块可通过导入导出机制实现模块间的代码共享。 导…

    JavaScript 2023年5月27日
    00
  • Electron应用显示隐藏时展示动画效果实例

    针对您提出的问题,我将给出一个详细的解答。下面将分成三个部分进行: 背景介绍 实例说明 总结 背景介绍 Electron 是一个基于 Chromium 和 Node.js 的开源框架,可以使用 HTML,CSS 和 JavaScript 构建跨平台的桌面应用程序。在 Electron 应用程序中,展示动画效果是很重要的一个方面,可以使应用程序更加生动和吸引人…

    JavaScript 2023年6月11日
    00
  • JS中的数组的sort方法使用示例

    下面是“JS中的数组的sort方法使用示例”的完整攻略。 什么是sort方法 sort方法是JavaScript中数组原型对象的一个方法,可以用来对数组元素进行排序操作。sort方法默认按照字符编码的顺序进行排序。 sort方法基本语法 sort方法的基本语法如下: array.sort([compareFunction]) 其中,array是待排序的数组对…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部