day0319
参数
形参和实参
//a,b形参
//执行fn1(3,4) 3,4是实参
function fn1(a,b){
}
fn1(3,4);
注意传入参数为普通类型与引用类型的区别
普通类型:给个相同值
引用类型:指向同一地址
如果实参数量小于形参数量,那么最后没有赋值的形参则是undefined
如果形参属性小于实参数量,那么多出阿来的实参无法从形参上获取(对应不上)
function fn1(a,b,c,d){
}
fn1(3,4,5);
function fn1(a, b, c, d) {
}
fn1(3, 4, 5, 6, 7);
此处未给函数的形参b传参,b为undefined,但是函数可执行不报错,数值+undefined为NaN
function sum(a,b){
console.log(res);
console.log(a);
console.log(b);
console.log(1+undefined);
var res = a + b;
console.log(String(res));
console.dir(res);
return true;
return res;
}
var res = sum(1);
alert(res)
形参初始值,当实参没有传入对应的值,默认是形参初始值(实参是undefined),如果传入则是传入值
必要的形参定义在函数的前面,非必要的形参定义在后面,大多数的初始值都是针对非必要的形参
形参中ES5是不能设置形参初始值,ES6中形参可以设置初始值
严格模式 之后再说
以为js是弱引用类型,所以参数是不需要设置类型的
如果封装的函数被比如人使用时,别人传入的参数不一定类型相同,会造成函数不可预期的错误
ES6中…arg
ES6中调用所有参数
传入不定数量的参数时会被放在arg这个数组中
function fn1(...arg){
console.log(arg);
}
fn1(1,2,3,4,5)
…arg必须放在形参的最后
function fn1(fn,...arg){
console.log(arg);
}
ES5中 arguments
arguments 是一个类数组对象。代表传给一个function的参数列表
ES5 函数内部arguments 参数列表 实参列表
arguments 对象只能在函数内使用
function fn1(){
var s=0;
for(var i=0;i<arguments.length;i++){
s+=arguments[i];
}
return s;
}
var sum=fn1(1,2,3,4,5,6);
console.log(sum);
arguments.length 在函数内是当前函数传入的 实参数量
fn1.length通过获取函数的length可以获取到函数的 形参数量
function fn1(a,b,c,d){
console.log(arguments.length);
console.log(fn1.length);
}
fn1(1,2,3,4,5,6,7);
arguments的属性
arguments.length 传递给函数的参数数量
arguments.callee 指向参数所属的当前执行的函数 英文含义 被召者
arguments.callee.caller 当前函数的环境外(上下文)函数,不是函数显示null 召唤者
function fn1(fn){
console.log(arguments.callee);//就是当前函数
console.log(arguments.callee.name);//就是当前的名字
console.log(arguments.callee.caller);//调用当前函数的环境外(上下文)函数,不是函数显示null
}
function fn2(){
fn1();
}
fn1();
fn2();
callee 是 arguments 对象的一个属性。它可以用于引用该函数的函数体内当前正在执行的函数。这在函数的名称是未知时很有用,例如在没有名称的函数表达式 (也称为“匿名函数”)内。
使用arguments.callee实现匿名递归
function fn1(fn){
fn(0);
}
fn1(function(a){
a++;
console.log(a);
if(a>3) return;
arguments.callee(a);
})
return
遇到return,跳出函数,不再执行return后面的语句
function fn1(){
var a=1;
console.log(a+5);
return;
console.log(a);
}
fn1();
使用return返回一个运行结果,或者一个值,仅能返回一个值
返回的结果可以在函数执行时赋值给变量
function fn1(){
var a=1;
var b=2;
return a+b;
}
var s=fn1();
console.log(s);
用return进行限制
限定函数传入参数类型或者其他的范围,来判断是否继续执行该函数还是跳出
function fn1(a){
if(!a) return;
var s=a+5;
console.log(s);
}
fn1(5);