1.高阶函数
高阶函数是对其他函数进行操作的函数,它接收函数作为参数或者将函数作为返回值输出。
// 接收函数作为参数
function fn(callback) {
callback && callback();
}
var foo = ()=>{
alert('hello world')
}
fn(foo)
// 将函数作为返回值,既是高阶函数又运用了闭包
// 内部访问到外部,然后把内部的值返回出去,外部在调用时就可以访问到
// outer()是调用里面的inner这个函数,再次()就是inner调用其内部
function outer() {
var num = 1;
function inner() {
var n = 2;
alert(n + num);
}
return inner;
}
outer()()
2.闭包
闭包:内部作用域可以访问外部作用域中的变量,延长了作用域的范围
缺点:消耗内存
// 打印1,2,3,4,也可以把var改为let
// 不使用闭包打印4个4
for (var i = 0; i <= 3; i++) {
(function (i) {
setTimeout(() => {
console.log(i);
}, i * 1000);
})(i);
}
//将函数作为返回值,此处也用了闭包
function outer() {
var num = 1;
return function inner() {
var n = 2;
alert(n + num);
}
}
outer()()