首页 > NFT > 深度|基础面试23:什么是闭包(closure),为什么要用它?突破作用域链
币圈观察  

深度|基础面试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>

 

基础面试23:什么是闭包(closure),为什么要用它?突破作用域链


还是画图解释什么是闭包吧。

 

function outside() { var num = 999; var inside = function() { alert(num); } num++; return inside; } var inside = outside(); inside() ;

 

基础面试23:什么是闭包(closure),为什么要用它?突破作用域链

 

核心解释

外部需要内部的变量,但是外部不能访问内部。比如红框需要蓝筐变量num,我们可以返回绿框,因为绿框在内,绿框可以访问蓝框绿框被return返回到外部红框,它依然能够访问蓝框,所以突破了外部作用域不能访问内部作用域的限制。

免责声明
世链财经作为开放的信息发布平台,所有资讯仅代表作者个人观点,与世链财经无关。如文章、图片、音频或视频出现侵权、违规及其他不当言论,请提供相关材料,发送到:2785592653@qq.com。
风险提示:本站所提供的资讯不代表任何投资暗示。投资有风险,入市须谨慎。
世链粉丝群:提供最新热点新闻,空投糖果、红包等福利,微信:juu3644。