闭包是面试的典型题目
特征
- 1.函数嵌套函数
- 2.函数内部可以运用外部参数和变量
- 3.参数和变量不会被垃圾回收制回收
定义
- 有权访问另一个函数作用域中的变量的函数
- 创建闭包最常见的方式是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量
缺点
- 常驻内存,增大内存使用量,使用不懂很容易造成内存泄漏
应用场合
经典例题
function aaa(){
var a = 1;
return function(){
alert(a++)
};
}
var fun = aaa();
fun();
fun();
fun = null;
常见有关面试题 - 代码分析
1
for(var i = 0;i < 5;i++){
SetTimeOut(function(){
console.log(New Date,i)
},1000);
}
console.log(New Date,i);
代码解读
- SetTimeOut是异步执行,1s后往任务队列里添加一个任务,当执行完主线上的全部任务,才会执行任务队列中的任务
- 每一次for循环SetTimeOut执行一次,但是里面的函数并没有执行,只是放在任务队列中等待执行,1s后定时函数执行时,for循环已经结束,i = 5 打印5次
- for循环后i=5,循环外的打印函数是主线任务,直接执行打印5。1s执行定时函数,打印5个5。
2
for(var i = 0;i < 3;i++){
SetTimeOut(function(){
console.log(i);
}
,0);
console.log(i); // 0,1,2 -> 3,3,3
}
代码解读
- for循环开始,每次循环都添加一个定时函数(异步执行),然后打印i(0,1,2),当i=3时循环结束(此时i=3),1s后执行定时函数,打印(3,3,3)