什么是闭包?手写一个闭包函数? 闭包有哪些优缺点?
时间: 2023-07-26 08:38:40 浏览: 105
JS闭包、作用域链、垃圾回收、内存泄露相关知识小结
闭包是指函数可以访问其外部作用域中定义的变量,即使在函数执行完成后,这些变量依然存在。闭包函数是指在函数内部定义一个函数,并且返回这个函数,这个内部函数就可以访问外部函数的变量,形成了闭包。
下面是一个例子:
```
function outerFunction() {
var name = "John";
function innerFunction() {
console.log(name);
}
return innerFunction;
}
var myFunction = outerFunction();
myFunction(); // 输出 "John"
```
闭包的优点:
- 可以访问外部函数的变量,可以避免使用全局变量,减少命名冲突的可能性。
- 可以实现函数的私有变量,避免变量被外部访问到。
闭包的缺点:
- 闭包会占用更多的内存,因为它需要保存外部函数的变量,容易造成内存泄漏。
- 闭包可能会导致变量的值发生意外的改变,因为内部函数可以访问外部函数的变量,如果外部函数的变量被修改,会影响内部函数的执行结果。
下面是一个手写闭包函数的例子:
```
function createCounter() {
var counter = 0;
function increment() {
counter++;
console.log(counter);
}
return increment;
}
var myCounter = createCounter();
myCounter(); // 输出 1
myCounter(); // 输出 2
myCounter(); // 输出 3
```
阅读全文