编程原则:高内聚,低耦合 => 单一责任制
作用:解耦合,把重复代码提取出来。
命名函数 :
1、函数申明
function fn() {
//不要var a = b = 1;
//这样申明,b是挂载window上的。
}
console.log(b) => 1
2、字面量
var fn = function test(a,b){
console.log(test.length) => 打印形参个数
console.log(arguments.length) => 打印出实参个数
//arguments为类数组,有length,可以循环、但是没有数组相关方法。
//arguments[1] => 通过arguments获取相关实参
//函数内部可以调用test进行递归操作
}
test() //=> 报错 ,这种赋值方法,系统把右边看做了一种表达式,并没有申明函数,所以调用会报错。
console.log(fn.name => test)
fn(1,2,3) //=> 正常执行
statement : a kinda action. suce as loops and if statements.
expression : produces a value.
关于表达式和语句的文章 : https://2ality.com/2012/09/expressions-vs-statements.html
3、arguments
不知道实参个数,可以通过arguments实现参数累加等计算
function fn(){
var sum = 0;
for (var i = 0; i < arguments.length;i++){
sum += arguments[i]
}
console.log(sum)
}
4、形参和实参的映射
function fn(a,b){
a = 3
b = 6
console.log(arguments[0], arguments[1]) //=> 3,undefined
}
fn(1)
js中函数不在乎参数有无以及数据类型。
arguments对象的值会自动同步到形参,但不与形参存在同一内存地址。有映射关系的形参和实参保持同步。传了值的形参可以通过arguments来改变,但是没有接受到参数的形参则不会(始终都是undefined)因为没有映射关系,这是因为arguments的长度只由实际实参个数决定。
参数默认值
function(a, b=1){}
js中参数默认值默认为undefined,但可以在形参后面加上=,设置默认值
如果实参为undefined,而形参有默认值,则形参取默认值,传其他falsy则直接取实参值