说一下什么是高阶函数
高阶函数是对其他函数进行操作的函数,他接收函数作为参数或者将函数作为返回值输出。
①
<script>
function fn(callback){
callback&&callback();
}
fn(function(){
alert('hi')
})
</script>
②(这也就是我们说的闭包)
<script>
function fn(){
return function fn(){}
}
fn();
</script>
此时fn就是一个高阶函数
函数也是一种数据类型,同样可以作为参数,传递给另外一个参数使用,最典型的就是作为回调函数。
比如:
<script>
function fn(a,b,callback){
console.log(a+b);
callback&&callback();
}
fn(1,2,function(){
console.log('我是最后调用的');
});
</script>
闭包
1、变量作用域
变量根据作用域的不同分为两种,全局变量和局部变量。
1、函数内部可以使用全局变量。
2、函数外部不可以使用局部变量。
3、当函数执行完毕,本作用域内的局部变量会销毁
2、什么是闭包呢?
闭包(closure)指有权访问另一个函数作用域中的变量的函数。 ----- JavaScript高级程序设计
简单理解就是,一个作用域可以访问另外一个函数内部的局部变量。
这就是一个闭包
<script>
function fn (){
var num =10;
function fun (){
console.log(num);
}
fun();
}
fn();
</script>
此时我们fn就是一个闭包。
另外一种闭包形式:
<script>
function fn() {
var num = 10;
return function() {
console.log(num);
};
}
var f = fn();
// 类似于:
// var f = function fun (){
// console.log(num);
// }
f();
</script>
闭包的作用
延伸了变量的作用范围