函数基础
函数声明方式: 使用
function
关键字定义函数函数提升: 函数声明会被提升到作用域顶部,可以在定义前调用
函数调用: 使用函数名加括号
()
调用函数代码块: 使用
{}
创建代码块,用于分组语句
高阶函数
高阶函数是指以函数为参数或返回值为函数的函数。
回调函数
回调函数是作为参数传递给另一个函数的函数
示例:
//参数是函数 ===>回调函数
function fn3(aa) {
aa();
}
//调用传入函数
fn3(function () {
console.log("hello world");
});
闭包
闭包是指函数能够访问其词法作用域外的变量
通常是函数返回另一个函数,内部函数可以访问外部函数的变量
示例:
// 返回值为函数 ====>闭包
function fn4() {
let num = 400
return function () {
console.log(num)
}
}
fn4()()
console.log(num);//报错 因为num在闭包内
递归与柯里化
递归函数
递归函数是指在函数内部调用自身的函数
常用于解决可以分解为相同子问题的问题
示例: 斐波那契数列
// 函数内部调用函数本身 ===> 递归函数
function fn() {
console.log(1);
// 递归调用
fn();
}
//执行
// fn();
// 兔子数列 斐波那契数列
// 例子 1 1 2 3 5 8 13 21
function fib(n) {
if (n <= 2) {
return 1;
}
return fib(n - 1) + fib(n - 2);
}
console.log(fib(6));
函数柯里化
柯里化是将接受多个参数的函数转化为一系列接受单个参数的函数的过程
示例:
// 普通函数
function fn(a, b, c, d, e, f) {
return a + b + c + d + e + f;
}
let result = fn(1, 2, 3, 4, 5, 6);
console.log(result);
// 功能一样
// 多参数函数转化成一系列单参数的函数 ===>柯里化
function fn(a) {
return function (b) {
return function (c) {
return function (d) {
return function (e) {
return function (f) {
return a + b + c + d + e + f;
};
};
};
};
};
}
let jg = fn(1)(2)(3)(4)(5)(6)
console.log(jg)
作用域
局部作用域: 在函数内部定义的变量只在函数内部可访问
全局作用域: 在函数外部定义的变量在整个代码中可访问
块级作用域: 使用
{}
创建的块级作用域(ES6+)