mysql闭包表应用场景_闭包的理解和应用场景

1.什么是闭包??

在了解闭包之前,我们要清楚js的另一个知识,那就是作用域链。什么是作用域链,比如一个函数里面包含着另一个函数,里面的函数在使用一个变量的时候会在函数自己的作用域内去查找这个变量,如果没有,就会沿着作用域链向上级函数的作用域去查找,这样的一个过程我们就叫做作用域链。

作用域链是可以有函数内部向外部去查找使用需要的变量,但是无法从上到下去查找函数内部的变量,所以这时候就出现了闭包,闭包就是解决这一问题。简单来说,闭包就是一个可以访问另一个函数内部变量的函数。

1 functionf1(){2 var n = 100

3 functionf2(){4 n=n+100

5 console.log(n);6 }7 returnf28 }9 var temp =f1()10 temp() //200

在上述代码中创建了一个函数f1(),并在其内部创建了一个函数f2(),在正常情况下,在f2中可以访问f1中的变量n,但是f1不能访问f2中定义的变量,但是通过return将f2作为参数返回给f1,通过f2闭包来建立起与f1的联系,这样就可以访问f1中的变量

例子2.

var aaa = (function(){var a = 1;functionbbb(){

a++;

console.log(a);

}functionccc(){

a++;

console.log(a);

}return{

b:bbb,//json结构

c:ccc

}

})();

console.log(aaa.a);//undefined

aaa.b(); //2

aaa.c() //3

在上述代码中,由于闭包的作用,变量在函数使用后并没有被回收,而是继续存在内存中,当第二次使用该变量的时候,它的值应该是第一次试用后改变后的值,因此,aaa.c(),的值是在aaa.b()使用后的值得举出上在加1,最后输出的结果是3

2.闭包的应用场景

当我们使用计时器的时候setTimeout(function(){},1000)的时候,第一个参数是一个函数,或者是一段执行的js代码,第二参数是第一个参数执行的时间间隔。

当我们需要往第一个参数(这里针对第一个参数是一个函数的情况)是一个函数,需要往这个哈数传递参数的时候,这时就可以使用闭包:

1 functionf1(name) {2 var Name =name3 functionf2() {4 console.log(Name);5 }6 returnf27 }8 var arr = [1, 2]9 for (let i = 0; i < arr.length; i++) {10 let num =arr[i]11 var func =f1(num)12 setTimeout(func, 1000);13 }

上述代码输出结果为:1,2

闭包应用场景之封装变量:

1 var counter = (function(){2 var privateCounter = 0; //私有变量

3 functionchange(val){4 privateCounter +=val;5 }6 return{7 increment:function(){ //三个闭包共享一个词法环境

8 change(1);9 console.log(privateCounter);10

11 },12 decrement:function(){13 change(-1);14 console.log(privateCounter);15

16 },17 value:function(){18 returnprivateCounter;19 }20 };21 })();22

23 console.log(counter.value());//0

24 counter.increment();//1

25 counter.increment();//2

闭包总结:

1.闭包是一个可以访问另一个函数内部变量的函数

2.一般的函数在使用完后,内部的变量会被回收,而闭包不会,变量依旧存在于内存中,不会消失。

3.频繁的使用闭包会占用内存,降低CPU性能,但是可以释放内存(在使用完闭包后,手动使变量为null)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
闭包是指在一个函数内部定义的函数可以访问到该函数外部的变量。闭包通过延伸变量的作用范围,使得变量不会销毁。闭包的核心作用是延长变量的声明周期。闭包的形成条件是在一个函数内部定义一个函数,并且内部函数引用了外部函数的变量。 闭包应用场景有多种,其中一些包括: 1. 创建私有变量:通过闭包可以实现私有变量的概念,使得外部无法直接访问到内部函数中的变量。 2. 延长变量的声明周期:闭包可以使变量在函数执行完后仍然保持存在,可以在之后的操作中继续使用。 3. 模块化:通过闭包可以创建模块化的代码,将一些私有的变量和方法封装在闭包中,只暴露给外部需要使用的部分。 4. 函数柯里化:使用闭包可以实现函数柯里化,即将一个接受多个参数的函数转化为接受单一参数的函数序列。 5. setTimeout传参:在使用setTimeout时,可以通过闭包传递参数,使得参数在回调函数中可用。 6. 回调:闭包可以用于处理回调函数,可以在回调函数中引用外部函数的变量。 7. 立即执行函数:通过立即执行函数可以创建闭包,使得内部函数可以访问外部函数的变量。 8. 函数防抖和节流:通过闭包可以实现函数防抖和节流的功能,对于频繁触发的事件进行限制。 这些都是闭包应用场景,通过使用闭包可以实现更加灵活和高效的编程。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [什么是闭包?及闭包应用场景有哪些](https://blog.csdn.net/qq_43375584/article/details/124838158)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [JS闭包|谈谈对闭包理解?...闭包有哪些应用场景闭包有什么缺点?如何避免闭包引起的内存泄露?](https://blog.csdn.net/nicotine12333/article/details/125885756)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值