学习函数之前我们应该明确为什么要学习函数?
函数可以进重复冗余的代码进行封装将来函数还可以多次调用
一.函数的基本知识
1.函数的声明和调用
声明:function 函数名(){函数体}
调用:函数名()
注意点:函数在声明后不会立即执行,徐亚调用之后才能使用,,而且函数还可以多次调用
2.函数的参数(形参和实参)
形参:形式参数,本身没有具体的值或者类型,只在将来函数调用的时候才有值
在函数声明时,定义在函数名()中的参数,就叫形参
作用:占位置
实参:实际参数,有具体的类型和值
在函数调用时,传递的参数就叫实参
作用:可以通过调用将值传递给形参
3.函数的返回值
return 值;
在开发过程中,一般函数执行都会有结果,如果需要拿到结果就需要return把它返回
4.函数三要素
函数名
参数(可有可无)
返回值(可有可无)
二.函数的进阶内容
1.函数的参数和返回值进阶
函数的参数:
1,如果函数名重名了,后面的函数会将前面的函数覆盖
2.实参和形参的个数问题,形参大于实参,形参没有值返回undefined,小于实参,多余实参被忽略
函数的返回值:
1.return 表示返回函数的结果,还可以结束当前函数,后面的代码不会再执行
2.函数可以没有返回值,如果没有设置返回值,自动returnundefined
3.return可以单独使用,用于提前结束函数,相当于return undefined
2.函数内部可以调用函数
3.控制台的断点调试(重要)
1.为什么需要断点调试,我们需要在调错或者执行代码时,一步步查看代码的执行过程
2.断点调试的步骤
(1) f12打开控制台
(2) 找到sources,打开对应的文件
(3) 添加断点,刷新页面
(4) 代码就停留在断点处
3.断点调试的按钮
f8 直接往后执行到下一个断点
f10 一步步执行,但是到了含糊直接执行完函数
f11 一步步执行,也会进入函数一步一步走
shift + f11 跳出当前函数
三.函数的重点
1.作用域(变量起作用的区域)
全局变量(在任何地方都可以访问到):在script标签内,在函数外,声明的变量就是全局变量
局部变量(只在当前函数内可以访问):在函数名声明的变量就是局部变量
隐式全局变量:对于一个从来没有声明过的变量直接赋值,就是隐式全局变量
变量的访问规则:自己有就访问自己的,自己没有就访问外面的
2.预解析
预解析初体验: 1.先进行预解析,目的是确保代码没有语法错误,确定有多少变量
2.再代码一行一行的执行
预解析的规则:
1. 将所有的var 提升,只提升声明不提升赋值,如果有重名的var 后面的把前面的覆盖
2. 将所有函数提升,只提升函数声明不提升调用,也会覆盖
3.如果函数与var同名,函数优先,var被忽略
先提升函数,后提升变量,函数优先
3.声明函数的两种方式
1. 声明式 function fn(){..}
2. 表达式的方式 var fn = function(){ .. }
区别,声明时可以先调用,后声明,因为预解析会提升函数的声明,但是表达式必须先赋值再调用
4.匿名函数(没有名字的函数,不能直接使用)
使用方式:1.可以赋值给变量,var fn = function(){}
2.可以匿名函数自调用,(沙箱),防止变量命名的全局污染
5.递归函数
自己调用自己,主注意要有结束条件,不能成死递归
复杂问题简单化,找出规律