js高级_112、常见闭包
将函数作为另一个函数的返回值
function fn1(){
var a=2;
function fn2(){//执行函数定义就会产生闭包,执行函数定义不是指调用函数。
a++;
console.log(a);
}
return fn2;
}
var f=fn1();
f();//3
f();//4
它是调的fn1,但是fn1它的返回的是fn2,所以它这个f里面实际上是保存的是fn2的函数的引用。相当于f是fn2函数的实例。所以这个fn2函数的上下文对象里面的a是等于2的,每调用一次它就加一次,只有重新调用外部函数fn1的时候才会重新产生一个闭包,重新产生一个fn2的函数上下文对象,里面的a才会重置。但是这两个调用fn1方法所接收的fn2是两个独立的闭包。
上面只产生了1个闭包。
怎么看闭包产生了几个?看外部函数被执行了几次。
闭包什么时候产生?
外部函数对象被调用时候产生。内部嵌套的闭包函数被调用是不会产生新的闭包的。
闭包产生之后,外部函数执行完了,被引用的对象不会消亡,因为它赋值给了一个变量,相当于闭包这个空间的引用也给了这个变量了。,如果没有闭包,就访问不了里面的a了。
将函数作为实参传递给另一个函数调用。
function showDelay(msg,time){
setTimeout(function(){
console.log(msg);
},time)
}
showDelay("hello",2000);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」