函数基础

105 阅读5分钟

函数

函数的概念:

在JS中,函数可以理解为在一段程序(页面)中多次出现的代码端 , 封装起来的盒子

函数的使用

1.定义函数(创建一个盒子)
  1.1 声明式定义
      语法:function fn (内部填写参数){
        内部填写函数调用时要执行的代码段
      }
      function:关键字->表明后续的是一段西数
      fn:函数的名字->将来函数调用的时候需要用到,函数名自定义

  1.2赋值式定义函数
      var fn2 = function () {
      console.log('我是 fn2 函数")
      }

  声明式与赋值式的区别:
    1).写法不同
    2).调用上略有不同
        声明式定义的函数,可以在函数定义前去调用
        题值式定义函数,不能再函数定义前去调历,其本身就是声明一个变量,然后给他赋值一个函数

  再JS中,如果再定义变量之前使用变量的话,那么变量的值为_undefined  ( * 变量提升  * )

2.函数的调用(使用盒子的代码)
  不管是声明式还是赋值式定义的函数,调用方式都是一样的
  调用语法:函数名() / 变量名()

函数的参数

1.参数的作用?
如果一个函数没有书写参数,那么这个函数的功能相对来说比较单一;如果书写参数,可以是我们的函数使用更加灵活.

2.参数书写方式:
    1).function后的小括号内书写的参数我们叫做“形参"!!
       形参的作用,书写之后,相当于在函数内部创建了一个变量,变量实际的值由"实参"传递
    2).函数名后的小括号内书写的参数我们叫做“实参"!!! 
       实参的作用:将自身的值,按照一一对应的关系,传递给形参
    函数的参数

3.形参和实参两个的数量,要一一对应:
    1).形参的数量如果大于实参:
        那么会将实参按照顺序一一传递给对应的形参,多出来的形参,相当于变量只定义没赋值,所以他们的值是undefined
    2).实参数量如果大于形参:
        那么会将实参按照顺序一一传递给对应的形参,多出来的实参无法在函数内部通过函数的方法调用

4.函数参数的默认值
    函数再创建形参的时候,默认给一个值,将来在调用函数的时候,
    如果没有传递那么这个形参的值也不会是 undefined而是给的默认值
    如果传递了对应的值,那么形参的值是实参传递进来的值执行,否则按照默认值来运行

函数的返回值

  即函数的执行结果

  JS规定:在函数内部创建或者定义的变量,只能在函数内部使用(作用域详细讲解)

  我们如果想在函数外部得到函数内部的某一个值,或者运算结果,我们可以通过return 这个关键字来帮我们完成

  return 具有中断函数的能力
  所以一殷来说我们将它放在函数的尾部

函数的预解析(面试)

预解析的一个表现 就是声明式函数在定义前可以被调用

定义:
JS在执行代码的时候,会有一个所谓的解析阶段
解析阶段,做了一件事,就是函数提升,就是将声明式函数的定义,提升到当前作用域的最顶端
作用域的最顶端:
暂时理解为当前页面的最开始的位置

作用域

定义:就是变量可以起作用的范围
分类:
(1).全局作用域(直接在script内书写的代码)
    再此作用域创建的变量,,我们四做全局变量,在当前script标签内的哪里都能使用
    在JS中,全局作用域中有一个提前给我们准备好的 对象,这个对象叫做window
    我们创建的全局变量,会被自动添加到window对象中


(2).局部作用域(在Js 中,只有函数能够创建局部作用域)
    在此作用域创建的变量,只能在当前作用域使用,超出这个作用域(也就是在函数外边)去使用,就会找不到变量

作用域链

  定义:就是在访问一个变量时,如果当前作用域没有,就会去自己的父亲作用域,也就是上一层作用域内查找,如果找到就直接使用,如果没有找到继续向上层查找,直到查找到最项层的全局作用域,如果找到了直接使用,如果没找到报错提示变量不存在(未定义)
  我们将这个一层一层向上查找的规律,叫做作用域链

  赋值规则:
  在给变量赋值的时候,首先会去当前作用域查找该变量,如果有直接赋值,并停止查找
  如果没有,会去自己的父级查找,在父级找到直接修改值然后停止查找。如果没有继续向自己的父级查找,直到找到全局作用域
  在全局作用域内,找到直接赋值修改他的值,如果没有找到,那么会在全局作用域创建一个变量,并赋值

递归函数

定义:本质上还是一个函数,当一个函数在一个函数的内部调用了自 
    身,那么就算是一个递归函数,(只不过有点小缺陷)