说说你对闭包的理解

2021-03-05 09:25发布

12条回答
aijingda
2楼 · 2021-03-05 11:47

各种专业文献的闭包定义都非常抽象,我的理解是: 闭包就是能够读取其他函数内部变量的函数

由于在javascript中,只有函数内部的子函数才能读取局部变量,所以说,闭包可以简单理解成“定义在一个函数内部的函数“。

所以,在本质上,闭包是将函数内部和函数外部连接起来的桥梁

三岁奶猫
3楼 · 2021-03-05 13:14

闭包就是将函数内部和函数外部连接起来的一座桥梁。

yuixan
4楼 · 2021-03-05 15:31

使用闭包主要是为了设计私有的方法和变量。

闭包的优点是可以避免全局变量的污染;缺点是闭包会常驻内存,增加内存使用量,使用不当很容易造成内存泄漏。在JavaScript中,函数即闭包,只有函数才会产生作用域。
闭包有3个特性:

(1)函数嵌套函数。
(2)在函数内部可以引用外部的参数和变量。
(3)参数和变量不会以垃圾回收机制回收


我的网名不再改
5楼 · 2021-03-05 16:06

闭包就是函数执行产生一个私有的作用域,在这个作用域中的私有变量和外界互不干扰,而且作用域不销毁,这些私有变量存储的值也都保存下来了,所有整体来说闭包就是为了保护和保存变量。

应用场景:

1.循环事件绑定,

2.单例模式管理代码:


let  xxxRender = (function () {

return {

init: function() {

}

}

})


3.函数柯里化


Function.prototype.bind = function bind(context, ...arg) {

return () => {

fn.call(context, ...arg);

}

}


爱学习的小巴
6楼 · 2021-03-05 16:33

解析:使用闭包主要是为了设计私有的方法和变量。闭包的优点是可以避免全局变量的污染;缺点是闭包会常驻内存,增加内存使用量,使用不当很容易造成内存泄漏。在JavaScript中,函数即闭包,只有函数才会产生作用域。闭包有3个特性:(1)函数嵌套函数。(2)在函数内部可以引用外部的参数和变量。(3)参数和变量不会以垃圾回收机制回收。


不吃鱼的猫
7楼 · 2021-03-06 10:09

就是将函数内部和函数外部连接起来的一座桥梁

任@先生
8楼 · 2021-03-06 17:11

闭包的优点是可以避免全局变量的污染;缺点是闭包会常驻内存,增加内存使用量,使用不当很容易造成内存泄漏

靓猴一枚
9楼 · 2021-03-07 10:57

1.闭包的简介:

闭包就是能够读取其他函数内部变量的函数。只有函数内部的子函数才能读取局部变量,在本质上,闭包是函数内部和函数外部连接起来的桥梁。

当函数可以记住并访问所在词法作用域时,就产生了闭包,即使函数是在当前词法作用域之外执行。 - - 出自《你不知道的JavaScript(上卷)》

2.闭包的定义:

如果在一个内部函数里,对在外部作用域(但不是全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure)。

3.闭包的特点:

可以读取自身函数外部的变量(沿着作用域链寻找)先从自身开始查找,如果自身没有才会继续往上级查找,自身如果拥有将直接调用。(哪个离的最近就用哪一个)

延长内部变量的生命周期

函数b嵌套在函数a内部

函数a返回函数b

4.闭包的作用:

在函数a执行完并返回后,闭包使得JavaScript的垃圾回收机制不会收回a所占用的资源,因为a的内部函数b的执行需要依赖a中的变量,闭包需要循序渐进的过程。

5.闭包的构成:

闭包由俩个部分构成:函数以及创建该函数的环境