JavaScript 闭包详解
闭包是JavaScript中一个强大而复杂的概念,对于很多初学者来说可能有些难以理解。但一旦掌握了闭包的基本原理,你会发现它在日常编程中非常实用。本文将从基础概念开始,通过简单易懂的示例,逐步深入讲解JavaScript中的闭包。
什么是闭包?
**闭包(Closure)**是指一个函数能够记住并访问其词法作用域,即使该函数在其原始作用域之外执行时也是如此。简单来说,闭包使得函数可以保留对创建它时所在的作用域中变量的引用。
备注
词法作用域指的是在代码编写阶段就确定的作用域,也就是根据代码的位置来决定变量的访问权限。
闭包的基本示例
看一个最简单的闭包示例:
function createGreeting(greeting) {
// 外 部函数
return function(name) {
// 内部函数,形成闭包
console.log(`${greeting}, ${name}!`);
};
}
const sayHello = createGreeting("Hello");
const sayHi = createGreeting("Hi");
sayHello("Alice"); // 输出: Hello, Alice!
sayHi("Bob"); // 输出: Hi, Bob!
在这个例子中:
createGreeting
函数接收一个greeting
参数- 它返回一个新函数,这个新函数接收一个
name
参数 - 返回的函数可以访问
createGreeting
的greeting
参数 - 即使
createGreeting
已经执行完毕,返回的函数仍然能访问greeting
变量
这就是闭包的核心特性:函数与其词法环境的组合。