作用域和闭包是基本概念,在如何在函数和代码块中访问和管理变量方面发挥着至关重要的作用。在这篇文章中,我们将了解之间的区别范围和关闭在 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 化)很有用。 |
相关用法
- Javascript String.fromCharCode()用法及代码示例
- Javascript String.fromCodePoint()用法及代码示例
- Javascript Symbol.for()用法及代码示例
- Javascript Symbol.hasInstance用法及代码示例
- Javascript Symbol.keyFor()用法及代码示例
- Javascript String()用法及代码示例
- Javascript Sort()用法及代码示例
- Javascript String includes()用法及代码示例
- Javascript String substr()用法及代码示例
- Javascript String trim()用法及代码示例
- Javascript String startsWith()用法及代码示例
- Javascript String lastIndexOf()用法及代码示例
- Javascript String toUpperCase()用法及代码示例
- Javascript String toLowerCase()用法及代码示例
- Javascript String split()用法及代码示例
- Javascript String indexOf()用法及代码示例
- Javascript String endsWith()用法及代码示例
- Javascript String concat()用法及代码示例
- Javascript String charAt()用法及代码示例
- Javascript Symbol.search用法及代码示例
- Javascript Symbol.match用法及代码示例
- Javascript Symbol.replace用法及代码示例
- Javascript Symbol.split用法及代码示例
- Javascript Set转Array用法及代码示例
- Javascript String转Binary用法及代码示例
注:本文由纯净天空筛选整理自佚名大神的英文原创作品 Difference Between Scope and Closures in JavaScript。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。