面试中常常被面试官问道什么是闭包,有时面试官也会让你手写一个简单的闭包函数,为了弄清楚其原理,我们可以亲自动手试试。
1.什么是闭包?
简单来说函数内部能访问另一个函数内部的变量的方法就叫做闭包。
2.闭包怎么产生的?
(1)在一个函数内部创建另一个函数
function global(){
var num=1;
function closeArea(){ //闭包
return num++;
}
return closeArea;//返回闭包函数
}
闭包特点:
(1).通常我们在函数内部定义的变量,都会在函数执行完之后被销毁;但是如果有闭包函数的存在,那么这个变量的值就会在闭包函数中被储存下来,直到闭包不存在为止。
(2)闭包只能取得他的父级的包含函数中的最后一个变量,下面通过一个经典的列子做一个介绍。
for循环里打印i的值。
原因:js 执行的时候首先会先执行主线程,异步相关的会存到异步队列里,当主线程执行完毕开始执行异步队列, 主线程执行完毕后,此时 i 的值为 4,说以在执行异步队列的时候,打印出来的都是 4(需要对 event loop 有所了解(js 的事件循环机制))
如何修改使其正常打印:(使用闭包使其正常打印)