JavaScript函数闭包解释

54 阅读2分钟

JavaScript的函数闭包(Closures)是一种常见的程序设计概念,也是实现JavaScript特性的重要工具。它可以让嵌套函数能够访问其外部函数定义的变量,以及隐藏重要信息。

想要理解闭包,首先来看一下下面这个函数:

function greeting(name) {
  var message = 'Hello, ' + name;
  return function greet(){
    console.log(message);
  };
};
 
var sayHi = greeting('John');

上面这个函数greeting()定义了一个变量message以及一个函数greet(),它们都存储在greeting()函数内部。而外部函数greeting()的结果是另一个函数,也就是greet(),它能够访问message变量,当调用sayHi()时,message变量的值被打印在控制台上。

这里,greet()函数就是一个闭包,也就是说它被定义在外部函数内部,这就使它能够访问外部函数定义的变量,以及隐藏重要信息。

闭包也可以用于构建特定上下文的隔离空间,以及控制对资源的访问。下面的函数用于获取一个Cookie的值:

function getCookie() {
  var cookieName = 'myCookie';
  return function getCookieValue() {
    return cookieName + '=ABCD';
  };
};

var getCookieValue = getCookie();
getCookieValue(); // 'myCookie=ABCD'

这里,getCookie()函数定义了一个变量cookieName,它被存储在getCookie()函数内部。而外部函数的结果是另一个函数,也就是getCookieValue(),它能够访问cookieName变量,当调用getCookieValue()时,cookieName变量的值被返回给调用者。

从上面的例子中可以看到,闭包有助于构建一个模块化的代码架构,使你能够维护代码并保护数据安全性。

总结一下,JavaScript的函数闭包可以让嵌套函数能够访问其外部函数定义的变量,以及隐藏重要信息。而外部函数的结果是另一个函数,也就是greet(),它能够访问message变量,当调用sayHi()时,message变量的值被打印在控制台上。闭包也可以用于构建特定上下文的隔离空间,以及控制对资源的访问。