当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Javascript Scope和Closures的区别用法及代码示例


作用域和闭包是基本概念,在如何在函数和代码块中访问和管理变量方面发挥着至关重要的作用。在这篇文章中,我们将了解之间的区别范围关闭在 JavaScript 中。

什么是范围?

JavaScript 中的作用域是指声明变量或函数并可以访问的上下文或环境。 JavaScript 使用基于函数的作用域,这意味着在函数内部声明的变量具有本地作用域,而在任何函数外部声明的变量具有全局作用域。

例子:在此示例中,在全局作用域中声明了一个名为 message 的变量,并且在函数内设置和访问其值,演示了 JavaScript 中全局作用域的概念。

Javascript


let message; 
// Declare message in global scope
function GFG() {
  message = "Hello, world!";
  console.log(message);
}
GFG();
// Now it's accessible globally
console.log(message);

输出:

Hello, world!
Hello, world!

什么是闭包?

当函数 “remembers” 处于其词法作用域时,JavaScript 中就会发生闭包,即使它是在该作用域之外执行的。换句话说,闭包允许函数从其包含函数访问变量,甚至在包含函数完成执行之后也是如此。

例子:在此示例中,创建了一个闭包,其中内部函数保留从其包含的 “outers” 函数对 “name” 变量的访问,从而允许它在调用时显示个性化问候语。

Javascript


function outers() {
    let name = "Kumar";
    function inner() {
        console.log("Hello, " + name + "!");
    }
    return inner;
}
let greeting = outers();
greeting();

输出:

Hello, Kumar!

JavaScript 中作用域和闭包的区别:

特征

范围

闭包

定义

说明变量访问的上下文。

指函数记住和访问其词法范围的能力。

变量的生命周期

作用域中的变量具有有限的生命周期。

通过闭包访问的变量可以在包含函数的生命周期之外持续存在。

使用权

范围内的变量可以在该范围内访问。

即使在该函数退出后,闭包也允许从其包含的函数访问变量。

使用案例

帮助防止变量命名冲突并提供对函数或块内变量的结构化访问。

对于创建私有数据、维护状态和实现高级模式(例如柯里化和 memory 化)很有用。



相关用法


注:本文由纯净天空筛选整理自佚名大神的英文原创作品 Difference Between Scope and Closures in JavaScript。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。