函数
函数基础
重复代码、冗余代码的缺点:
代码重复,可阅读性差
不易维护,如果代码逻辑改变了,所有地方的代码都要跟着改变,效率太低。
函数的声明与调用
声明函数的语法:
1 | function 函数名(){ |
调用函数的语法:
1 | 函数名(); |
特点:
1 | 1. 函数声明的时候,函数体并不会执行,函数体只有在调用的时候才会执行, |
函数的参数
- 形参(形式参数):在函数声明时,设置的参数。作用是占位置。
- 实参(实际参数):在函数调用时,传入的参数。作用:函数调用时,会把实参的值赋值给形参,这样形参就有了值。
语法:
1 | //带参数的函数声明 |
注意:
- 形参在声明时,值不固定,只有在调用的时候,形参的值才确定,形参的值会跟着函数调用时的实参不一样而不一样。
- 如何确定形参:在声明函数的时候,碰到不确定的值的时候,就可以定义成形参。
函数的返回值
当函数执行完的时候,我们期望函数给我一些反馈(比如计算的结果),这个时候可以让函数返回一些东西。也就是返回值。函数通过return返回一个返回值
返回值语法:
1 | //声明一个带返回值的函数 |
注意:
- 函数的调用结果就是返回值,因此我们可以直接对函数调用结果进行操作。
函数三要素
函数三要素包括:函数名、参数、返回值
1 | function getArea (r) { |
函数高级
函数调试
断点调试:
1 | F8:跳到下一个断点,如果后面没有断点了,那么代码直接执行完。 |
函数内部可以调用函数
1 | function fn1() { |
全局变量与局部变量
全局变量:在最函数外,script标签内声明的变量就是全局变量,全局变量在任何地方都能访问的到。
局部变量:在函数中声明的变量,就是局部变量,局部变量只有在当前函数体内能够访问。
隐式全局变量:没有使用var定义的变量也是全局变量。
1 | var num = 11;//全局变量 |
变量的查找规则:
- 自己有就用自己的,自己没有就用外面的。
1 | var num = 11; |
预解析
js执行代码分为两个过程:
- 预解析过程(变量与函数提升)
- 代码一行一行执行
预解析过程:
- 函数优先,先提升function,后提升var
- 遇到重名的var会被忽略。
- 遇到重名的function会被覆盖。
测试:
1 | //1. |
声明函数的两种方式
函数声明(命名函数):
1 | function 函数名(){ |
函数表达式(匿名函数):
1 | var 函数名 = function(){ |
这两种函数声明的区别:
- 命名函数可以先调用,在声明,因为预解析
- 函数表达式必须先声明,再调用(在DOM中注册事件的时候用的非常的多)
匿名函数
匿名函数:没有名字的函数
匿名函数如何使用:
1 | 1. 将匿名函数赋值给一个变量,这样就可以通过变量进行调用 |
自执行函数(匿名函数自调用)的作用:防止全局变量污染。