一、什么是函数
函数就是对一些代码进行封装。就是将一些可以重复利用的代码放在一个容器里面,在下次使用该功能的使用就不用重复写里面的代码,只需要调用这个函数就可以了。
二、定义函数
1、声明式
function 函数名(形参){函数体}
2、赋值式
var 函数名 = function(形参){函数体}
声明式函数与赋值式函数的区别: 声明式函数是可以在定义前使用的,而赋值式函数只能在定义后使用。
3、构造函数
构造函数的名字首字母要大写。并且在使用的使用还要添加“new 函数名”
function 函数名<首字母大写>(形参){}
new 函数名()=====>调用函数
4、箭头函数
箭头函数是es6新增的函数
简写了代码,取消了function关键字
函数名=(形参)=>{函数体}
let x=(a)=>{console.log(a);}
如果只有一个形参可以将()取消掉
函数名= 形参=>{函数体}
let x=a=>{console.log(a);}
如果函数体中只有一串代码可以将{}取消掉
函数名= 形参=>函数体
let x=a=>console.log(a);
三、参数
参数分为实参和形参。在调用函数时传入的参数是实参,在定义函数时的参数是形参。
let function fn(形参){}
fn(实参)
如果形参比实参多,多余的实参就是nudefined
如果实参比形参多,就可以使用arguments来使用多余的实参
四、返回值:return
函数的返回值也叫函数的执行结果。
写在return后面的值就是返回的结果,返回的结果需要使用一个变量接收
如果在调用函数的时候,使用了一个变量接收了执行结果,但函数内没有返回值。那么这个返回的就是undefined
五、预解析
在js中有一个神奇的现象,就是先调用一个变量,后面再定义一个变,它会是nudefined,而不报错。
原因:在浏览器内部有一个js引擎,这个引擎负责网页中的js代码。它会偷偷的将var定义的变量和声明式函数放在脚本的最前面。如果在函数内部,它会将定义的变量放在函数的最前面。
六、作用域
1、全局作用域
全局作用域也叫window作用域,在全局作用域中定义的变量,在整个页面都是可以使用的。
2、局部作用域
在函数内部的作用域也叫局部作用域,在局部作用域中定义的变量叫局部变量,只能在当前作用域中才可以使用,外部是使用不了的。
函数的形参也属于局部变量,return的局部变量,并不会吧局部变量变成全局变量,只是返回了局部变量的值。
七、变量的访问规则与赋值规则
1、访问规则
在使用一个变量的使用,它会优先在自身的作用域中查找这个变量。如果找到就会使用,如果找不到,就会到父级作用域中查找,找到就会使用,找不到就会继续向上找。以此类推,直到
全局作用域为止,如果全局作用域也没有就会报错。
2、赋值规则
赋值规则与访问规则一样,会优先在自身作用域中找,找到就赋值,找不到就找父级作用域。以此类推,直到全局作用域,如果没有就会报错。
八、递归函数
递归函数就会在函数内部调用自身