带你读《现代Javascript高级教程》——执行上下文与闭包(1)

简介: 带你读《现代Javascript高级教程》——执行上下文与闭包

1. 由来

JavaScript中的闭包源于计算机科学中的一种理论概念,称为“λ演算”(Lambda Calculus)。λ演算是计算机科学的基础之一,1930年由Alonzo Church提出,它是一种用于描述计算过程的数学抽象模型,也是函数式编程语言的基础。

 

在JavaScript中,闭包是函数和声明该函数的词法环境的组合。这个环境包含了闭包创建时所能访问的所有局部变量。

 

理解闭包,需要理解JavaScript的特性和工作原理。JavaScript的函数在创建时,就确定了其操作的上下文环境,即词法作用域。这是因为JavaScript采用的是静态作用域,也叫词法作用域,函数的作用域在函数定义的时候就决定了。

 

例如:

function outer() {
    var name = 'JavaScript';
    function inner() {
        console.log(name);
    }
    return inner;}
var innerFunc = outer();innerFunc(); // 输出 'JavaScript'

在这个例子中,outer函数返回了inner函数。inner函数访问了outer函数的局部变量name,因此形成了一个闭包。即使outer函数执行完毕,name变量的引用仍然被保留,因此innerFunc在执行时仍然能够输出 'JavaScript'。

 

闭包的概念虽然来自计算机科学的深层理论,但在日常的JavaScript编程中,它是一个非常实用且常见的特性,被广泛用于如数据隐藏和封装、模块化编程、回调函数和计时器等许多场景中。


2. JavaScript中的闭包

在JavaScript中,闭包是一个强大而复杂的特性,理解和利用好闭包对于编写高效且安全的代码至关重要。下面就让我们深入地了解一下JavaScript的闭包。

闭包是指那些能够访问自由变量的函数。什么是自由变量呢?如果一个变量在函数内部被引用,但它既不是函数的参数也不是函数的局部变量,那么就称之为“自由变量”。

例如,我们有一个外部函数和一个内部函数:

function outerFunction(outerVariable) {
  function innerFunction() {
    console.log(outerVariable);
  }
  return innerFunction;}
var inner = outerFunction('Hello Closure');inner(); // 输出 'Hello Closure'


带你读《现代Javascript高级教程》——执行上下文与闭包(2)https://developer.aliyun.com/article/1347051?groupCode=tech_library

相关文章
|
2天前
|
JavaScript 前端开发
JavaScript高级四、高阶技巧
JavaScript高级四、高阶技巧
|
5天前
|
自然语言处理 JavaScript 前端开发
JavaScript闭包是函数访问外部作用域变量的能力体现,它用于封装私有变量、持久化状态、避免全局污染和处理异步操作。
【6月更文挑战第25天】JavaScript闭包是函数访问外部作用域变量的能力体现,它用于封装私有变量、持久化状态、避免全局污染和处理异步操作。闭包基于作用域链和垃圾回收机制,允许函数记住其定义时的环境。例如,`createCounter`函数返回的内部函数能访问并更新`count`,每次调用`counter()`计数器递增,展示了闭包维持状态的特性。
20 5
|
12天前
|
设计模式 自然语言处理 JavaScript
JavaScript进阶-函数表达式与闭包
【6月更文挑战第18天】JavaScript函数不仅是代码块,还是值,具备函数表达式和闭包等特性。函数表达式如匿名函数,可赋值、传参,但不提升,过度使用影响可读性。闭包允许访问外部作用域,即使父函数已结束,但不当使用可能导致内存泄漏。理解并妥善处理这些问题,如命名函数表达式、及时释放引用,能提升代码质量。通过实践深化对这些关键概念的理解至关重要。
|
2天前
|
前端开发 JavaScript 容器
程序技术好文:纯原生javascript下拉框表单美化实例教程
程序技术好文:纯原生javascript下拉框表单美化实例教程
|
3天前
|
JavaScript 前端开发 Java
javascript闭包详解
javascript闭包详解
|
5天前
|
JavaScript 前端开发 Java
深入ES6:解锁 JavaScript 类与继承的高级玩法
深入ES6:解锁 JavaScript 类与继承的高级玩法
|
5天前
|
前端开发 JavaScript 安全
解锁 JavaScript ES6:函数与对象的高级扩展功能
解锁 JavaScript ES6:函数与对象的高级扩展功能
|
5天前
|
弹性计算 自然语言处理 JavaScript
彻底明白js的作用域、执行上下文
彻底明白js的作用域、执行上下文
|
13天前
|
缓存 前端开发 JavaScript
【JavaScript】JavaScript 中的闭包:从入门到精通
【JavaScript】JavaScript 中的闭包:从入门到精通
16 0
|
JavaScript 前端开发
JavaScript核心概念之执行上下文和栈
Emm… 这个概念非常的抽象,简单来说呢,就是 JS 在执行某段代码的时候做的一些事情。
77 0
JavaScript核心概念之执行上下文和栈