【前端自学之路】JS之闭包的原理

js, 什么是闭包, 闭包的原理是什么

什么是闭包

通俗的说,闭包就是函数外部可以访问到函数内部的变量

看一个很简单的闭包例子

1
2
3
4
5
6
7
8
9
10
11
var outer = 0;

function get() {
console.log(outer)

var inner = 1;
}

get()

console.log(inner);

这是一个有问题的代码,问题在哪呢?

第4行,是输出变量outer的值,这个变量是在函数get之外定义的,函数内是可以访问到函数外的变量的
第11行,是输出变量inner的值,这个变量只在函数get内定义,所以这里是访问不到,会报JS引用错误

1
2
VM471:11 Uncaught ReferenceError: inner is not defined
at <anonymous>:11:13

这就是说明默认情况下函数外是不能访问函数内的变量的

下面我们就看下闭包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var outer = 0;

function get() {
console.log(outer)

var inner = 1;
return function() {
return inner;
};
}

var iFunc = get()

console.log(iFunc());

通过返回函数的方式,来实现访问函数内的变量,这就是闭包

闭包的优缺点

闭包的一个重要确定:如理不当,极易造成内存泄漏

坚持原创技术分享,您的支持将鼓励我继续创作!