javascript函数(超级详细全面讲解)

javascript函数

1.什么是函数

将需要反复使用的功能代码,封装成独立的模块,这个模块就是函数.

2.使用函数的好处?
  • 可复用(可重复使用)
  • 功能代码可控
3.函数的分类
  • 内置函数 (js给我们提供的)
  • 自定义函数 (自己定义)
4.函数的类型

Function

5.如何声明函数
5-1.语句定义法(在任意位置都可以调用)
       // 函数的基本语法
       function 函数名() {
           函数体
       }
       // 函数的调用
       函数名()
       //举例说明
       function sayHi() {
           document.write('你好!')
       }
       //函数的调用
       sayHi()

5-2.表达式定义法(只能先声明后调用)
 var 函数名 = function([参数]){
    //功能代码
 }
6.如何调用函数
  • 一般调用: 函数名([参数])
  • 事件调用 触发事件后调用函数
7.函数的参数
形式参数(形参):定义函数时所传递的参数
实际参数(实参): 调用函数时所传递的参数

注意:

  • 参数传递: 只能将实参 传递给形参,即单向传递

  • 形参只能是变量; 实参可以是变量,常量,表达式

  • 实参的数量 小于形参的数量时,多余的形参值为undefined

  • 实参的数量 大于形参的数量时,自动忽略多余的实参

8.函数的返回值 return

有返回值函数的概念:
1 . 当调用某个函数,这个函数会返回一个结果出来
2 . 这就是有返回值的函数

返回值得作用

  • 将函数内部处理后的结果返回到调用该函数的地方
  • 退出函数

**注意:**函数中不写return,函数得返回值就是undefind

arguments
function fn() {
        // arguments 接收调用函数时的所有实参
        console.log(arguments)
      }

      fn(12, 34, 5, 6, 78, 84, 4, 3, 2, 2, 12, 5)
9.函数作用域

作用的范围

全局作用域:在函数外定义的变量,在页面的任何一个地方都可以使用
局部作用域: 在函数内定义的变量,只能在函数内使用

**注意:**在函数中声明变量不加var 就是全局变量;形参 是局部作用域

作用域链:如果当前作用域没有,则向父级作用域查找,如果还没有,继续向父级作用域,一直找到全局作用域,如果还没有,报错

一旦进入作用域,就启动js解析器

1:在作用域中寻找一些东西 var function 形参

//找到var后,将var后的变量名提取出来,并给他初始化一个值undefined
//变量和函数同名,丢变量,保函数
//当有多个scripte标签时,从上到下依次解析并执行第一个script标签,然后下一个,依次类推
//在上面script标签中声明的东西,下面script标签中都可以使用
//下面script标签中声明的东西,上面使用会报错

2:逐行解读代码

​ 1:执行表达式
​ 2:函数调用
​ 一,预解析 var function 形参
​ 二,逐行解读代码
​ 1:执行表达式
​ 2:函数调用

10.匿名函数
  1. 将匿名函数赋值给一个变量

    var fn = function () {
             alert('hello')
          }
    fn()
    
  2. 将匿名函数绑定给一个事件

    document.onclick = function () {
             alert(0)
           }
    
  3. 匿名函数自我执行

    (function () {
             alert(123)
           })()
    
  4. 匿名函数的返回值(将一个匿名函数的返回值赋值给一个变量)

    var num = (function () {
             return 3
           })()
           alert(num)
    
  5. 输出一个匿名函数的返回值

    alert(
             (function () {
               return 'hello'
             })()
           )
    
  6. 给匿名函数传递参数

    var sum = (function (a, b) {
            return a + b
          })(3, 4)
          alert(sum)
    
11.递归

递归:函数自己调用自己,跟循环类似,他为了避免无限的递归,需要设置一个递归终止点

// 本质 :实现了循环

      // 1~n之间所有数的和

      function fnSum(n) {
        // 结束条件
        if (n === 1) {
          return 1
        }
        return n + fnSum(n - 1)
      }
      console.log(fnSum(100))

计算斐波那契数列的第N项

斐波那契数列(Fibonacci sequence),又称黄金分割数列。因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”。指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上, 斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3)。

 function fibonacci(n){
            if(n==1){
                return 1;
            }
            if(n==2){
                return 1;
            }
            //n = 3 :return fibonacci(2)+fibonacci(1)
            //n = 4 :return fibonacci(3)+fibonacci(2)
            return fibonacci(n-1)+fibonacci(n-2);
        }
 fibonacci(10)

递归函数的优缺点

优点:结构清晰, 可读性强, 而且容易用数学归纳法来证明算法的正确性, 因此它为设计算法、 调试程序带来很大方便。

缺点:递归算法的运行效率较低, 无论是耗费的计算时间还是占用的存储空间都比非递归算法要多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>