什么是函数:具有特定功能的代码块
函数与方法:调用的方式不同 函数通过函数名 | 方法通过.语法调用(点语法)
定义函数:function函数名(参数列表) {
函数体;
(函数体可以包含函数的返回值)
}
// 函数的调用: 函数名(参数列表)
// 函数的调用()一定不可以省略, 参数列表看情况(不管需不需要,均可以传或不传)
// 函数的分类:
// 无参函数:
function fn1() {
console.log("无参函数")
}
fn1();
// 有参函数:
function fn2(a, b) {
console.log("a,b的和:", a + b)
}
fn2(10, 20);
// 匿名函数:
var fn3 = function () {
// 匿名函数虽然没有名字, 但会开辟内存空间, 所以当然可以用一个变量来指向这个内存空间
console.log("没有直接定义名字的函数");
};
fn3(); // 系统不好在()()之间添加;作为语句结束,需要添加分号时一定需要手动添加
fn4 = fn3;
fn4();
// 匿名函数的自调用
(function () {
// 定义一个匿名函数, 至少需要使用一次, 使用一次的方式就叫做 匿名函数的自调用
// 如果匿名函数不存在任何使用, 编译就无法通过
// 匿名函数的自调用:
// 1.将整个匿名函数作为一个整体, 用()将其包裹
// 2.并完成函数的调用, 添加 (参数列表)
console.log(" 匿名函数的自调用");
})();
// 函数的参数:
// 函数的返回值:
// 函数的嵌套(定义 | 调用)
匿名函数出现的原因:为了生成一个局部的作用域(不被别人访问或出现重复定义的变量 )
函数的闭包:
// 闭包: 局部的函数(被一个函数包裹的函数) // 为什么使用闭包: // 1.一个函数要使用另一个函数的局部变量 // 2.闭包会持久化包裹自身的函数的局部变量 // 3.解决循环绑定
// 函数的嵌套定义
function outer() {
var num = 10;
function inner() {
// 1.在inner函数中,使用了outer的局部变量num
return num;
}
return inner;
}
var innerFn = outer();
// 2.借助闭包,将局部变量num的生命周期提升了
var num = innerFn();
console.log(num);