龙空技术网

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

代码开发 727

前言:

现在我们对“闭包closure”可能比较注重,咱们都需要剖析一些“闭包closure”的相关内容。那么小编同时在网上收集了一些关于“闭包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=""></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返回到外部红框,它依然能够访问蓝框,所以突破了外部作用域不能访问内部作用域的限制。

标签: #闭包closure