首页 > 试题广场 >

闭包 有什么用

[问答题]

让我用最土的话来给你解释解释什么是闭包?它有什么用?

我在网上搜过不少关于闭包的具体定义,给大家总结一下我的理解,举三个简单的例子,都作用到了闭包,可以先看一下他们的区别

var a

function b(){

___var i = 0

___a = function(){

______alert(i)

___}

};

_________________________

function funA(){

___var m = 10;

___return function(){

______alert(m)

___}

};

_________________________

var lis = document.getElementsByTagName("li");

for(var i=0;i<lis.length;i++){

___(function(i){

______lis[i].onclick = function(){

_________console.log(i);

______};

___})(i);

}

视觉上闭包其实就是一个函数内部的函数,对,闭包其实就是个函数。其次,想成为闭包,可不是什么函数都可以的,网上很多帖子说内部函数要引用外部函数的变量,这句话说的太模糊了。

仅仅是在内部函数中引入外部函数里的变量,这个内部函数你不返回,那么你在外部函数的同级作用域下还是访问不到外部函数内的变量

那么这就是形成闭包的第一种方式:内部函数引用了外部函数中的变量,然后再把这个内部函数返回

第二种方法,就是把这个内部函数保存在一个全局的变量中,我们就可以直接在全局通过这个变量名来调用这个内部函数,此时我们就不需要return内部函数了


总而言之,你只要能把这个“引用了外部函数内的变量”的内部函数给暴露出去,那它就叫做闭包

为什么这么复杂?闭包的初衷不就在解决函数内的变量,在函数外无法访问的问题

编辑于 2021-03-06 16:48:55 回复(0)
闭包可以访问和操作其他函数的内部变量的函数。
在JS中只有函数的子函数才可以访问其内部的变量,所以也可以将闭包理解为定义一个函数内部的函数。
发表于 2020-07-23 11:25:32 回复(0)
<p>能够操作和访问其他函数内部变量的函数,在JS中只有函数的子函数才能访问其内部变量,所以也可以将包闭理解成是定义一个函数内部的函数</p>
发表于 2020-06-08 16:56:31 回复(0)