函数的声明

函数的声明有三种方式:
1、声明式
通过function命令声明

  1. function fn (){
  2. }
  3. //function声明函数的关键字
  4. //fn是函数的名字(自己定义)
  5. //()中存放参数
  6. //{}中放执行的代码
  7. fn() //函数的调用

2、赋值式
通过变量赋值的方式,将函数赋值给变量。

  1. var fn = function (){
  2. }

3、Function构造函数

  1. var add = new Function()

注:如果同一个函数被多次声明,后面的声明就会覆盖前面的声明。

函数调用

函数的调用:使用圆括号运算符。函数名后面紧跟一对圆括号就会调用这个函数。 用法: 函数名()
注意: 定义完一个函数以后,如果没有函数调用,那么写在 {} 里面的代码没有意义,只有调用以后才会执行。

声明式与赋值式调用上的区别:
声明式函数: 调用可以在
定义之前或者定义之后**

  1. fn() //可以调用
  2. //声明式函数
  3. function fn(){
  4. }
  5. fn() //可以调用

赋值式函数: 调用只能在 定义之后

  1. fn() //报错
  2. //赋值式函数
  3. var fn = function(){
  4. }
  5. fn() //可以调用

原因是函数也存在函数名的提升:整个函数会像变量声明一样,被提升到代码头部。
所以使用声明式函数可以在定义之前调用,而赋值式只能在定义之后调用。

立即调用的函数表达式

有时,我们需要在定义函数之后,立即调用该函数。这时,你不能在函数的定义之后加上圆括号,这会产生语法错误
函数定义后立即调用的解决方法,就是不要让function出现在行首,让引擎将其理解成一个表达式。最简单的处理,就是将其放在一个圆括号里面。

  1. (function(){ /* code */ }());
  2. // 或者
  3. (function(){ /* code */ })();

通常情况下,只对匿名函数使用这种“立即执行的函数表达式”。它的目的有两个:一是不必为函数命名,避免了污染全局变量;二是 IIFE 内部形成了一个单独的作用域,可以封装一些外部无法读取的私有变量

参数

函数运行的时候,有时需要提供外部数据,不同的外部数据会得到不同的结果,这种外部数据就叫参数。
在定义函数和调用函数的时候都出现过(),而这个()就是存放函数的地方。

参数分为实参和行参

  1. 行参
    • 就是在函数内部可以使用的变量,在函数外部不能使用
    • 每写一个单词,就相当于在函数内部定义了一个可以使用的变量(遵循变量名的命名规则和命名规范)
    • 多个单词之间以 , 分隔 ```javascript function fn(a){ console.log(a) }

function fn1(a,b){ console.log(a,b) }

  1. - 如果只有行参的话,那么在函数内部使用的值个变量是没有值的,也就是 `undefined`
  2. - **行参的值是在函数调用的时候由实参决定的**
  3. 2、实参
  4. - 在函数调用的时候给行参赋值的
  5. - 也就是说,在调用的时候是给一个实际的内容的
  6. ```javascript
  7. function fn(num) {
  8. // 函数内部可以使用 num
  9. }
  10. // 这个函数的本次调用,书写的实参是 100
  11. // 那么本次调用的时候函数内部的 num 就是 100
  12. fn(100)

函数的return语句

return 返回的意思,其实就是给函数一个 返回值终断函数
遇到return语句,就直接返回return后面的那个表达式的值,后面即使还有语句,也不会得到执行。也就是说,return语句所带的那个表达式,就是函数的返回值。return语句不是必需的,如果没有的话,该函数就不返回任何值,或者说返回undefined。

  1. function fn() {
  2. console.log(1)
  3. console.log(2)
  4. console.log(3)
  5. // 写了 return 以后,后面的 4 和 5 就不会继续执行了
  6. return
  7. console.log(4)
  8. console.log(5)
  9. }
  10. // 函数调用
  11. fn()