深度|基础面试23:什么是闭包(closure),为什么要用它?突破作用域链
摘要:摘要:提示:后面画图精髓。闭包是指有权访问另一个函数作用域中变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变
摘要:提示:后面画图精髓。闭包是指有权访问另一个函数作用域中变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量,利用闭包可以突破作用链域,将函数内部的变量
提示:后面画图精髓。
闭包是指有权访问另一个函数作用域中变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量,利用闭包可以突破作用链域,将函数内部的变量和方法传递到外部。
闭包的特性:
1.函数内再嵌套函数
2.内部函数可以引用外层的参数和变量
3.参数和变量不会被垃圾回收机制回收
//li节点的onclick事件都能正确的弹出当前被点击的li索引
<!DOCTYPE html><html><head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title></title> <script src="https://cdn.bootcss.com/vue/2.5.6/vue.js"></script> <style type="text/css"> </style></head><body> <ul id="testUL"> <li> index = 0</li> <li> index = 1</li> <li> index = 2</li> <li> index = 3</li> </ul> <script type="text/javascript"> var nodes = document.getElementsByTagName("li"); for (var i = 0; i < nodes.length; i += 1) { nodes[i].onclick = (function(i) { return function() { console.log(i); } // 不用闭包的话,值每次都是4 })(i); } </script></body></html>

还是画图解释什么是闭包吧。
function outside() { var num = 999; var inside = function() { alert(num); } num++; return inside; } var inside = outside(); inside() ;

核心解释
外部需要内部的变量,但是外部不能访问内部。比如红框需要蓝筐的变量num,我们可以返回绿框,因为绿框在蓝框内,绿框可以访问蓝框,绿框被return返回到外部红框,它依然能够访问蓝框,所以突破了外部作用域不能访问内部作用域的限制。
- 免责声明
- 世链财经作为开放的信息发布平台,所有资讯仅代表作者个人观点,与世链财经无关。如文章、图片、音频或视频出现侵权、违规及其他不当言论,请提供相关材料,发送到:2785592653@qq.com。
- 风险提示:本站所提供的资讯不代表任何投资暗示。投资有风险,入市须谨慎。
- 世链粉丝群:提供最新热点新闻,空投糖果、红包等福利,微信:juu3644。

币圈观察



