闭包是一种函数,它的特殊之处在于它可以访问在它外部定义的变量,即使在它外部函数已经执行完毕的情况下,闭包仍然可以访问外部函数的变量。
当一个函数运行完毕后,函数内部的所有变量都会被销毁。但是,当一个内部函数引用了它外部函数的变量时,这些变量不会被立即销毁,而会被安全的存储在内存中。这个引用外部变量的内部函数就成为了闭包。
下面是一个闭包的简单示例:
function outerFunction() {
var outerVariable = "Hello";
function innerFunction() {
console.log(outerVariable);
}
return innerFunction;
}
var inner = outerFunction();
inner(); // 输出 "Hello"
在这个示例中,innerFunction被定义在outerFunction内部,并访问了outerFunction内部的变量outerVariable。outerFunction返回了innerFunction,所以outerVariable被安全的存储在内存中。因此,执行inner()
时,会输出 "Hello"。
下面是另一个示例,用闭包实现一个计数器:
function counter() {
var count = 0;
function increment() {
count++;
console.log(count);
}
return increment;
}
var inc = counter();
inc(); // 输出 1
inc(); // 输出 2
inc(); // 输出 3
在这个示例中,counter函数返回了一个内部函数increment,increment通过闭包访问了counter内部的变量count。每次调用increment时,count的值会增加并输出到控制台。
这样,我们一分钟内就可以理解JS闭包了。
本文链接:http://task.lmcjl.com/news/11530.html