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

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日

相关文章

  • JS实现的网页倒计时数字时钟效果

    JS实现的网页倒计时数字时钟效果的攻略如下: 需求 我们需要一个Web页面上实现一个倒计时数字时钟效果。 设计思路 生成HTML结构 使用CSS样式美化数字 使用JS实现倒计时功能 使用JS更新HTML内容 HTML代码 <div class="countdown"> <span id="days"&…

    JavaScript 2023年5月27日
    00
  • Ajax异步请求技术实例讲解

    Ajax异步请求技术实例讲解 Ajax是一种在不重新加载网页的情况下,能够实现与服务器进行数据交互的技术,它可以帮助我们通过JavaScript向服务器发起异步请求,并在请求成功后执行一定的操作,例如更新页面内容等。 Ajax的基本使用方法 在JavaScript中使用Ajax,需要用到XMLHttpRequest对象,通过该对象来向服务器发起请求并获取响应…

    JavaScript 2023年6月11日
    00
  • JS实用的动画弹出层效果实例

    JS实用的动画弹出层效果实例是一种常见的网页制作效果,它能够为网站增添一些动态效果,提高用户体验。在本篇攻略中,我将为大家详细讲解如何使用JavaScript实现这种动画弹出层效果。 准备工作 在开始制作之前,我们需要准备以下的工作: 在HTML文件中,引入JavaScript代码文件。 <script src="popup.js"…

    JavaScript 2023年6月10日
    00
  • JS实现遍历不规则多维数组的方法

    实现遍历不规则多维数组的方法,需要使用递归函数。递归函数是指在函数内部调用自身的函数,通过递归可以遍历多维数组中的每一个元素。下面是实现该方法的完整攻略。 步骤一:定义递归函数 首先需要定义一个递归函数,该函数可以遍历多维数组的每一项,并且判断该项是否为数组类型。如果该项是数组类型,则继续递归调用该函数。 function traverseArray(arr…

    JavaScript 2023年5月27日
    00
  • JavaScript中Object值合并方法详解

    当我们在JavaScript中有多个Object对象,并想将它们合并在一起时,Object提供了几个方便的方法。 Object.assign(obj1, obj2, …, objN) Object.assign() 方法用于将一个或多个源对象的所有可枚举属性复制到目标对象中。它返回目标对象。 语法 Object.assign(target, …sou…

    JavaScript 2023年5月27日
    00
  • 关于JavaScript实现动画时动画抖动的原因与解决方法

    关于 JavaScript 实现动画时动画抖动的原因与解决方法,我给你详细讲解。 原因 动画抖动通常是由于浮点数像素值引起的。由于屏幕在每个像素处都是有限制的,所以如果动画的像素值为小数,则会做出近似处理,这可能会导致动画抖动。 举个例子,在动画过程中,由于动画属性的值改变比较频繁,浮点数像素值也变得更加不可避免,浏览器会在每次重绘时尝试平滑过渡,这样就会导…

    JavaScript 2023年6月10日
    00
  • JavaScript实现二叉树定义、遍历及查找的方法详解

    二叉树是一种常见的树形数据结构,由一个根节点和最多两个子节点组成,其中左子节点小于等于根节点,右子节点大于根节点。在JavaScript中,我们可以使用对象来模拟二叉树。 1. 二叉树的定义 我们可以定义一个二叉树的节点对象,包含三个属性:值(value)、左子节点(left)、右子节点(right)。定义二叉树类(Tree),包含一个根节点(root)。 …

    JavaScript 2023年5月28日
    00
  • js截取字符串的两种方法及区别详解

    当我们需要在JavaScript中处理字符串时,常常需要对字符串进行截取。本篇攻略将会详细讲解js截取字符串的两种方法及其区别。 一、JavaScript中substring()方法 let str = "hello world"; let strNew = str.substring(3); console.log(strNew); 上…

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