深度剖析JavaScript作用域从局部到全局一网打尽

yizhihongxing

深度剖析JavaScript作用域从局部到全局一网打尽

什么是作用域

作用域是指一个变量、函数、对象可以被访问的范围。在JavaScript中,作用域有两种:全局作用域和局部作用域。

全局作用域是指在代码的任何地方都能访问的变量、函数、对象,通常是在顶层定义的。而局部作用域则是指只能在一个函数内部访问的变量、函数、对象。

作用域链

当在JavaScript中访问一个变量时,运行时会按照以下顺序查找变量:

  1. 首先查找当前作用域内是否存在该变量。
  2. 如果不存在,则向上一级作用域查找。
  3. 如果还不存在,则继续向上查找,直到找到全局作用域。

这个查找的过程被称为作用域链。作用域链的顶端是全局作用域,底部是当前执行环境的变量对象。

闭包

在JavaScript中,函数内部可以访问外部作用域的变量,这种情况被称为闭包。闭包是指在父函数执行完毕后,内部函数仍然可以访问父函数变量的现象。

示例1:作用域链

let globalVariable = "global variable";

function foo() {
  let outerVariable = "outer variable";

  function bar() {
    let innerVariable = "inner variable";
    console.log(innerVariable);
    console.log(outerVariable);
    console.log(globalVariable);
  }

  bar();
}

foo();

上述代码中,当调用foo()函数时,会生成一个新的执行环境,并按照作用域链查找内部的变量。因此,调用bar()函数时可以访问到innerVariableouterVariableglobalVariable变量。

示例2:闭包

function outerFunction() {
  let outerVariable = "outer variable";

  return function innerFunction() {
    console.log(outerVariable);
  }
}

let innerFn = outerFunction();
innerFn(); // 输出 "outer variable"

上述代码中,定义了一个outerFunction函数并返回一个内部函数innerFunction。当调用outerFunction函数时,生成一个新的执行环境,并将outerVariable变量存储在该执行环境中。但是,由于innerFunction函数是在outerFunction函数内部定义的,因此可以访问到outerVariable变量。当返回innerFunction函数时,outerFunction执行环境被销毁,但是innerFunction仍然可以访问outerVariable变量,这就是闭包的概念。

总结

作用域是指一个变量、函数、对象可以被访问的范围,在JavaScript中有全局作用域和局部作用域,作用域链是指在变量查找过程中按照作用域的嵌套顺序查找的过程。闭包是指函数内嵌套函数并能访问外部函数变量的现象,常常用于实现封装和缓存等功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深度剖析JavaScript作用域从局部到全局一网打尽 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • JS JSON对象转为字符串的简单实现方法

    一、背景概述 JSON对象是JavaScript中处理数据的重要方式之一。当需要将JSON对象转换为字符串时,我们通常要使用JSON.stringify()方法来实现。本文将详细说明如何将JSON对象转换为字符串,以便网站作者们更好地理解和应用。 二、JSON.stringify()方法介绍 JSON.stringify()是JavaScript的一个标准方…

    JavaScript 2023年5月27日
    00
  • element中form组件prop嵌套属性的问题解决

    当我们在使用element组件库的form组件进行表单处理时,可能会遇到prop属性中需要嵌套传递另一个属性值的情况。比如,我们需要将一个表单项的验证规则(rules)传递给另外一个表单项,例如两个密码输入框输入必须相同。 以下是解决此类问题的攻略: 步骤一:在模板中添加ref属性 在模板中,我们需要添加一个ref属性来标识这个表单项,这样我们在代码中就可以…

    JavaScript 2023年6月10日
    00
  • JS实现时间格式化的方式汇总

    让我来为你详细讲解如何实现JavaScript时间格式化。 1. 背景 在日常编程中,我们常常需要将时间戳转换为可读的时间格式,比如将 1616685660000 转换为 2021-03-25 16:14:20 的形式。JavaScript提供了以下几种方式来实现时间格式化: 使用原生JavaScript Date对象的 toLocaleString() 方…

    JavaScript 2023年5月27日
    00
  • javaScript中push函数用法实例分析

    JavaScript中的push函数用于在数组末尾添加一个或多个元素,并返回新数组的长度。在本篇攻略中,我们将分析push函数的用法和几个示例来更好地理解其用法。 1. push函数基本用法 push函数是JavaScript中数组对象的一种方法,语法格式如下: arr.push(element1[, …[, elementN]]) 其中arr是要进行添…

    JavaScript 2023年5月27日
    00
  • JavaScript流程控制(循环)

    JavaScript流程控制(循环) JavaScript提供了循环结构来重复执行代码块,为开发者处理重复性任务提供了方便。 在JavaScript中,有三种循环结构:for、while和do…while。在使用这些结构之前需要确定循环的条件,即循环的终止条件。只有当终止条件为false时,循环才会停止。 1. for循环 for循环是JavaScrip…

    JavaScript 2023年5月27日
    00
  • JavaScript中const、var和let区别浅析

    下面是完整的攻略: JavaScript中const、var和let区别浅析 JavaScript中常用的变量声明方式有三种,分别是const、var和let。它们的具体区别如下: const const是ES6中新增的一个用于声明常量(不可变)的关键字。声明之后,变量的值不能够再被修改,否则会导致TypeError类型的错误。 使用const声明的变量必须…

    JavaScript 2023年5月18日
    00
  • js 日期字符串截取分割成单个具体的日期(2009-12-30 13:28:29)

    想要将JS日期字符串截取、分割成单个具体的日期,我们可以使用字符串的截取、分割函数以及JS内置的日期对象。 具体流程如下: 首先,将日期字符串作为参数传递给JS内置的Date()构造函数,将其转换成日期对象。日期字符串格式必须为:yyyy-mm-dd hh:mm:ss,否则将会抛出错误。 let dateString = "2009-12-30 1…

    JavaScript 2023年5月27日
    00
  • JavaScript通过字典进行字符串翻译转换的方法

    JavaScript通过字典进行字符串翻译转换可以使用对象字典的方式来实现。具体的步骤如下: Step 1 定义字典对象(即键值对对象),其中键为需要翻译的原始字符串,值为对应的翻译后的字符串。例如以下代码: const translationDict = { "hello": "你好", "world&qu…

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