十一、函数
-----封装抽取
(一)简介
函数是function执行特定任务的代码块
作用:可实现代码复用,提高开发效率
(二)使用
1.声明函数
function 函数名() {
}
函数名命名规范:
1.与变量命名相似
2.小驼峰命名方式(setSum)
3.常用动词作为前缀
常用的动词前缀:
can:判读能否可以执行某个动作
has:判断有没有某个值
is:判断是否是某个值
get:获取某个值
set:设置某个值
load:加载某些数
2.调用函数
函数名 ()
函数不调用,不执行,可重复调用,随时调用,随时执行
练习:
3.函数传参(参数之间用逗号隔开)
作用:提高函数的灵活性
(1)声明
function 函数名(参数列表--形参) {
函数体
}
练习:
注:1.function getAct(形参--形式参数);调用时候的getAct(实参--具有实际意义)
可能是:实参在内存当中实际存在,有空间存储,而形参并没有给予它实际的内存空间。
2.开发过程中形参和实参个数尽量一致
3.alert('打印'),parseInt('11')...arr.pop('')本质上都是函数调用的传参
练习:
(2)参数默认值
作用:使程序更严谨
一个变量不赋值默认为undefined
一个函数调用不输入实参也默认为undefined,在上述案例中,则出现
undefined+undefined--->NaN
因此,在用户不输入参数时,可以给形参默认值
function getSum(a=0,b=0) {
}
4.函数返回值
关键字:return
函数本身不对结果进行处理,而是返回给调用函数者。
作用:对执行结果的扩展性更高,可以让其他的程序使用这个结果
例:pop()方法在删除数组的最后一个数后会返回该数
注:函数在大多数情况下都有返回值,但也有没有的,
如:alert()。此依情况而定
return 后面的代码不能执行,并且返回的值需要和return关键字并排写(不能换行)
练习:求数组中的最大值和最小值并返回最大值和最小值
函数返回多个值可用过数组返回。
注:
1.断点调试:进入函数内部看执行过程 F11
2.相同的函数名,后面覆盖前面
3.形参和实参数量不一致时:
4.函数结束用return
(三)作用域
程序代码中名字可用性的代码范围
作用:提高程序逻辑的局部性,增强程序的可靠性,减少名字冲突
分类:
全局作用域:在Script标签中都适用
局部作用域:也叫函数作用域 在某个具体范围内有效(例:循环里面的i;函数中的变量)
变量的访问原则:
在能够访问到的情况下 先局部后全局(作用域链:采取就近原则的方式来查找变量最终的值)
(四)匿名函数
没有名字的函数
函数可分为:具名函数和匿名函数
具名函数:
function getSum() {
}
匿名函数:
function () {
}
具名函数的调用是:函数名()
匿名函数的调用:(常用)
(1)(类似声明变量)需要先声明再调用
let getSum=function (x,y) {
}
getSum(1,2)
这就导致,具名函数的调用者可以在函数前后
而匿名函数的调用者只能在声明之后
(2)立执函数(立即执行)
作用:防止变量污染
写法:
a.(function(形参) {函数体}) (实参)
b.(function (形参){函数体}(实参))
注:多个立执函数用分号隔开
练习:
(五)逻辑中断
由于逻辑运算符&& 、||的一些属性而导致的在某些情况下判断好前面表达式就停止后面表达式的计算。(类似短路)
可运用于改变参数的默认值:
当调用函数为getSum() 时(没有输入实参时)
x,y的值为undefined,转化为布尔值为:false,
那么,会接着执行后面的,令x,y=0
而当有实参时,x,y为true,发生中断,不再执行后面0的赋值操作
转换为Boolean型:Boolean()
(六)隐式转换:
a. " "+1---->"1"
b. 3-" "---->3 (" "在减法下转换为0)
c. null经过数字转换后变为0 (null+4--->4)
d.undefined经过数字转换后变为NaN (undefind+3-->NaN)
e.NaN==undefined--->true