深入理解作用域、作用域链和闭包

这篇具有很好参考价值的文章主要介绍了深入理解作用域、作用域链和闭包。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 ​

深入理解作用域、作用域链和闭包,javaScript,前端,ES6,前端,javascript,vue.js,原力计划

🎬 岸边的:个人主页

 🔥 个人专栏 :《 VUE 》 《 javaScript 》

⛺️ 生活的理想,就是为了理想的生活 !

深入理解作用域、作用域链和闭包,javaScript,前端,ES6,前端,javascript,vue.js,原力计划

目录

 📚 前言

 📘 1. 词法作用域

📖 1.2 示例

📖 1.3 词法作用域的应用场景

 📘 2. 作用域链

📖 2.1 概念

📖 2.2 示例

📖 2.3 作用域链的应用场景

 📘 3. 闭包

📖 3.1 概念

📖 3.2 示例

📖 3.3 闭包的应用场景

 📚 4. 总结


 📚 前言

深入理解作用域、作用域链和闭包,javaScript,前端,ES6,前端,javascript,vue.js,原力计划

JavaScript 中,作用域是指变量在代码中可访问的范围。理解 JavaScript 的作用域和作用域链对于编写高质量的代码至关重要。本文将详细介绍 JavaScript 中的词法作用域、作用域链和闭包的概念,并探讨它们在实际开发中的应用场景。

 📘 1. 词法作用域

词法作用域是 JavaScript 中最常见的作用域类型。它是在代码编写阶段确定的,而不是在代码执行阶段确定的。在词法作用域中,变量的访问权限是由它们在代码中的位置决定的。

📖 1.2 示例

function outer() {
  var outerVariable = "Hello";

  function inner() {
    var innerVariable = "World";
    console.log(outerVariable + " " + innerVariable);
  }

  inner();
}

outer(); // 输出: Hello World

在上面的示例中,函数 inner 内部可以访问外部函数 outer 中定义的变量 outerVariable,这是因为它们处于词法作用域中。词法作用域确保了变量在代码编写阶段就能够正确地被访问。

📖 1.3 词法作用域的应用场景

词法作用域在 JavaScript 中有广泛的应用场景,包括:

  • 变量访问控制词法作用域使得我们可以控制变量的可见性和访问权限,避免命名冲突和变量污染。
  • 模块化开发通过使用函数和闭包,可以实现模块化的代码组织,将变量和函数封装在私有作用域中,提供了良好的封装性和代码组织性。
  • 函数嵌套函数嵌套是 JavaScript 中常见的编程模式,词法作用域确保了内部函数可以访问外部函数的变量,实现了信息的隐藏和封装。

 📘 2. 作用域链

📖 2.1 概念

作用域链是 JavaScript 中用于查找变量的一种机制。它由当前作用域和所有父级作用域的变量对象组成。当访问一个变量时,JavaScript 引擎会首先在当前作用域的变量对象中查找,如果找不到,则沿着作用域链向上查找,直到找到变量或者到达全局作用域。


Global Execution Context
   |
   +-- Function Execution Context 1
   |      |
   |      +-- Function Execution Context 2
   |             |
   |             +-- Function Execution Context 3
   |
   +-- Function Execution Context 4

📖 2.2 示例


var globalVariable = "Global";

function outer() {
  var outerVariable = "Hello";

  function inner() {
    var innerVariable = "World";
    console.log(globalVariable + " " + outerVariable + " " + innerVariable);
  }

  inner();
}

outer(); // 输出: Global Hello World

在上面的示例中,函数 inner 内部可以访问全局作用域中定义的变量 globalVariable,以及外部函数 outer 中定义的变量 outerVariable,这是因为 JavaScript 引擎按照作用域链的顺序查找变量。

📖 2.3 作用域链的应用场景

作用域链在 JavaScript 中有多种应用场景,包括:

  • 变量查找作用域链决定了变量的查找顺序,使得 JavaScript 可以正确地找到并访问变量。
  • 闭包通过创建闭包,内部函数可以访问外部函数的变量,实现了信息的保留和共享。
  • 模块化开发作用域链的特性使得我们可以实现模块化的代码组织,将变量和函数封装在私有作用域中,提供了良好的封装性和代码组织性。

 📘 3. 闭包

📖 3.1 概念

闭包是指函数和其词法环境的组合。它可以访问其词法作用域中定义的变量,即使在函数外部也可以访问这些变量。闭包在 JavaScript 中常用于创建私有变量和实现模块化开发。

📖 3.2 示例

function createCounter() {
  var count = 0;

  return function() {
    count++;
    console.log(count);
  };
}

var counter = createCounter();
counter(); // 输出: 1
counter(); // 输出: 2

在上面的示例中,函数 createCounter 返回一个内部函数,该内部函数引用了外部函数 createCounter 的变量 count。即使在外部函数执行完毕后,内部函数依然可以访问并修改变量 count,这就是闭包的特性。

📖 3.3 闭包的应用场景

闭包在 JavaScript 中有多种应用场景,包括:

  • 私有变量闭包提供了一种实现私有变量的机制,可以隐藏变量并提供访问控制。
  • 模块化开发通过创建闭包,可以实现模块化的代码组织,将变量和函数封装在私有作用域中,提供了良好的封装性和代码组织性。
  • 延迟执行通过使用闭包,可以延迟执行函数,实现异步操作和事件处理。

 📚 4. 总结

作用域、作用域链和闭包是 JavaScript 中重要的概念,它们相互关联,共同构建了 JavaScript 的变量访问和代码组织机制。理解这些概念的原理和应用场景对于编写高质量的 JavaScript 代码至关重要。

通过词法作用域,我们可以控制变量的可见性和访问权限,实现模块化的代码组织,避免命名冲突和变量污染。

作用域链决定了变量的查找顺序,使得 JavaScript 可以正确地找到并访问变量。同时,作用域链的特性也为闭包的创建提供了基础,通过闭包,我们可以创建私有变量,实现模块化的代码组织以及延迟执行函数等。

深入理解作用域、作用域链和闭包,能够帮助我们更好地编写可维护、高效的 JavaScript 代码。

深入理解作用域、作用域链和闭包,javaScript,前端,ES6,前端,javascript,vue.js,原力计划文章来源地址https://www.toymoban.com/news/detail-694912.html

到了这里,关于深入理解作用域、作用域链和闭包的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JavaScript 作用域与闭包

    本文内容学习于:后盾人 (houdunren.com) 1.作用域 1)函数被执行后其环境变量将从内存中删除。下面函数在每次执行后将删除函数内部的 total 变量。  function count() {         let total = 0; } count (); 2)函数每次调用都会创建一个新作用域 3)如果子函数被使用时父级环境将被保留

    2024年02月14日
    浏览(33)
  • JavaScript高级:闭包与作用域

    在 JavaScript 的世界里,闭包是一个令人着迷且神秘的概念,它为我们提供了一种强大的能力,能够在函数内部捕获并保留外部作用域的变量。本文将详细解释闭包的概念与应用,带你揭开 JavaScript 的神秘面纱,通俗易懂地理解闭包的奥秘。 1. 作用域与闭包的关系 作用域是指

    2024年02月13日
    浏览(38)
  • JavaScript(函数,作用域和闭包)

    类似于Java中的方法,是完成特定任务的代码语句块 特点 使用更简单 不用定义属于某个类,直接调用执行 分类 系统函数 自定义函数 1.将字符串转换为整型数字 js示例1 从下标为0起,依次判断每个字符是否可以转换为一个有效数字 如果不是有效数字,则返回NaN,不再继续执

    2024年02月10日
    浏览(38)
  • 【面试高频】JavaScript作用域、闭包、变量提升

    目录 前言 一、作用域 1. 局部作用域 2. 全局作用域 二、作用域链 三、闭包 1. 闭包是什么 2. 闭包的运用 JavaScript 中的作用域、闭包和变量提升是 JavaScript 中的重要概念,也是面试高频考点。 作用域规定了变量的可见性和生命周期,闭包通过捕获自由变量的方式延长了变量的

    2024年02月12日
    浏览(31)
  • 学习并深入理解闭包

    前言 学习闭包前,先学点别的。 程序执行时: 1.编译阶段 创建变量对象GO,包括变量和函数作用域装在一块内存中。但是没有赋值,变量都是undefined,函数:0xxx 2.创建执行上下文 里面有VO对应ao(函数里的变量,没执行,undefined,执行,被赋值) 3.代码执行 函数里的变量赋值

    2024年02月08日
    浏览(27)
  • 深入理解React与闭包的关系

    本文将深入探讨React与闭包之间的关系。 我们将首先介绍React和闭包的基本概念,然后详细解释React组件中如何使用闭包来处理状态和作用域的问题。 通过本文的阅读,你将对React中闭包的概念有更深入的理解,并能够在开发React应用时更好地应用闭包。 React是一个流行的Jav

    2024年02月16日
    浏览(33)
  • 我从来不理解JavaScript闭包,但我用了它好多年

    前言  📫 大家好,我是南木元元,热衷分享有趣实用的文章,希望大家多多支持,一起进步!  🍅  个人主页: 南木元元 你是否学习了很久JavaScript但还没有搞懂闭包呢?今天就来聊一下被很多人誉为JavaScript中最难理解的概念之一的闭包。 目录 闭包的概念 闭包产生的原因

    2024年02月05日
    浏览(48)
  • 前端常见面试题之js基础(手写深拷贝、原型和原型链、作用域和闭包)

    值类型包括 :字符串(string)、数字(number)、布尔值(boolean)、undefined。 引用类型包括 :对象(object)、数组(array)、函数(function)和null。 二者的区别 当你将一个值类型赋给另一个变量时,会复制该值的副本。而当你将一个引用类型赋给另一个变量时,只会复制对

    2024年01月22日
    浏览(47)
  • 作用域和作用域链的相关知识

    作用域(scope)规定了变量能够被访问的“范围”,离开了这个“范围”变量便不能被访问。 作用域分为: 局部作用域 全局作用域 局部作用域分为函数作用域和块作用域。 在函数内部声明的变量只能在函数内被访问,外部无法直接访问。 总结 : 函数内部声明的变量,在函数

    2024年02月08日
    浏览(43)
  • JS面试题:说一下什么是作用域、作用域链?

    说一下执行上下文的理解?     在 代码执行前 产生     产生变量提升、函数提升的原因     定义:         全局执行上下文对象:在执行全局代码前,创建对应的全局执行上下文对象,即window对象,进行预处理         函数执行上下文对象:在调用函数后、准备执行函数

    2024年01月25日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包