下面重点来解释一下“JS中的闭包”的相关知识点。
什么是闭包
闭包(Closure)是一种内部函数可以访问外部函数作用域中变量的特殊函数形式。一种理解是,闭包就是能够读取其他函数内部变量的函数。在js中,要理解闭包,就必须要理解作用域链。
当js代码执行时,每个函数都会创建自己的作用域,而在函数内部创建的作用域可以访问外部变量,在外部创建的作用域无法访问内部变量,这就是作用域链的基本原理。
在一个函数内部创建一个子函数,且子函数可以访问父级函数的作用域,就形成了一个闭包。
闭包的优点
- 可以读取函数内部的变量
- 可以保护变量的私有性
闭包的缺点
- 容易造成内存泄漏
由于闭包会将父级函数的作用域都保存在内存中,所以如果父级函数很大,那么闭包会占用比较大的内存。
闭包的应用场景
- 封装私有变量
- 模块化开发
- 延迟函数
闭包的示例
示例1
function outer() {
let name = "Tom";
function inner() {
console.log(name);
}
return inner;
}
let innerFn = outer();
innerFn(); // 输出Tom
在这个示例中,inner函数可以访问outer函数中的变量name,也就是说inner函数形成了闭包,把outer函数中的变量保存在内存中,以便能够使用。
示例2
function createIncrementor() {
let counter = 0;
return function() {
counter++;
console.log(counter);
}
}
let inc = createIncrementor();
inc(); // 输出1
inc(); // 输出2
在这个示例中,createIncrementor函数返回一个可以访问counter变量的函数,inc就是一个闭包,保存了counter变量的值,每次调用inc函数都会对counter变量进行增加。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:通俗易懂地解释JS中的闭包 - Python技术站