高阶函数定义
函数可以作为参数传递 或将函数作为返回值输出
function fn(a, b, callback) {
console.log(a + b);
callback && callback();
}
fn(1, 2, function() {
console.log('我是最后调用的');
});
闭包定义
闭包指有权访问另一个函数作用域中变量的函数。简单说,一个作用域可以访问另一个函数内部的变量。
闭包的作用:延伸了变量的作用范围。
例1:从fun函数的作用域访问到了fn函数作用域中的变量。
function fn() {
var num = 10;
function fun() {
console.log(num);
}
fun();
}
fn();
例2:从fn函数的外部访问其内部的变量。
function fn() {
var num = 10;
function fun() {
console.log(num);
}
return fun;
}
var f = fn();
f();
例3:解决var声明变量时,对迭代变量的奇特声明和修改
for (var i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i);
}, 1000)
}
本意是输出0 1 2 3 4 但真实结果是 5 5 5 5 5
通过闭包来解决:
for (var i = 0; i < 5; i++) {
(function(i) {
setTimeout(function() {
console.log(i);
}, 1000)
})(i);
}
这个闭包就是立即执行函数,但闭包存在内存泄漏的问题。