博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS闭包
阅读量:5351 次
发布时间:2019-06-15

本文共 578 字,大约阅读时间需要 1 分钟。

标准的闭包: function a(){ var i=0; function b(){ alert(++i); } return b;}var c = a();c();这是个标准的闭包.在函数a中定义了函数b,a又return了b的值.这些可以先不管.var c = a();c();这两句执行很重要.在var c = a();这行里,执行了a函数,那么肯定a经过了return.按照主流语言的函数特性,现在c的值就是a的返回值.第二行c()的执行实际执行的就是b函数.最后不管执行的是谁,会弹出一个值为0的窗口,到此为止,所有的生命周期按理论来说就算全部结束了.可是,如果我们再多执行一行.var c = a();c();c();第一次弹出0,第二次执行却弹出了1.也就是说,第一次c()后,a中的i依然保留.自然a在内存的栈区依然保留.a是return过了,但是,a及内部值却依然存在,这就是闭包.
好了,总结下, 1,闭包外层是个函数. 2,闭包内部都有函数. 3,闭包会return内部函数. 4,闭包返回的函数内部不能有return.(因为这样就真的结束了) 5,执行闭包后,闭包内部变量会存在,而闭包内部函数的内部变量不会存在.

转载于:https://www.cnblogs.com/shimily/articles/4550352.html

你可能感兴趣的文章
多校HDU5723 最小生成树+dfs回溯
查看>>
ASP.NET MVC分页实现之改进版-增加同一个视图可设置多个分页
查看>>
关于ASP.NET MVC开发设计中出现的问题与解决方案汇总 【持续更新】
查看>>
关于Entity Framework中的Attached报错的完美解决方案终极版
查看>>
Selenium之Web页面滚动条滚操作
查看>>
组合数据类型练习,英文词频统计实例上
查看>>
Uber回馈开源的一些软件
查看>>
day 3 修改haproxy.cfg 作业
查看>>
UIScrollView —— 缩放实现案例(二)
查看>>
【Qt】Qt Linguist介绍【转】
查看>>
sim usim Uim 区别
查看>>
网页中插入透明Flash的方法和技巧
查看>>
动态内存申请函数选择(realloc、malloc 、alloca、 calloc)
查看>>
获取元素属性get_attribute
查看>>
视觉设计师的进化
查看>>
Python/jquery
查看>>
WPF之Binding
查看>>
【BZOJ】【2132】圈地计划
查看>>
HTML图片映射实用
查看>>
DP题目 sicily 1687 Permutation
查看>>