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变量的值被打印在控制台上。闭包也可以用于构建特定上下文的隔离空间,以及控制对资源的访问。