函数组成形式
关键字function 函数名test 括号(参数) 大括号{}
括号里的参数可填可不填
括号里传递的参数是形式参数----形参
function sum(a,b){
var c = a+b;
document.write(c+' ')
}
sum(1,2)
//传入实参 执行函数
实际的值是实际参数—实参
参数数量可以对应不上 比如形参比实参多 或者相反的
每个函数都有一个隐式的属性 arguments 实参列表 类似于数组 伪数组
arguments 实参列表
arguments.length 实参的数量
形参.length 形参的数量
例如:
function sum(a,b,c,d){
if (sum.length>arguments.length) {
console.log('形参多了');
} else if(sum.length<arguments.length){
console.log('实参多了');
}else{
console.log('相等');
}
}
sum(11,2,3,4,5,7)
求实参的和 用for循环
function sum(){
// 定义一个变量来接收和
var result = 0;
for(var i = 0;i<arguments.length;i++){
result += arguments[i]
}
console.log(result);
}
sum(1,2,3,4,5,6,7,8,9,10)
形参和实参还有一种映射关系:建立映射的前提是函数的实参数量和形参数量一样
也就是说当形参 a = 2的时候,那么arguments[0]=2,也就是说,当形参a的值变的时候,arguments[0]的值也变了,那么当arguments[0]=3的时候,同时,a = 3,a的值也跟着改变了,但是他俩不是同一个变量,这就是系统里的映射规则。
但是,当形参和实参数量不一样的时候,就不存在映射了,但是,在这种情况下,我们所谓的映射不存在了是说那个实参值和对应的形参不存在映射了
接下来用代码说话吧
function sum(a,b){
//这个时候相当于隐式的var a = 1 了
// 那么当这个时候
a = 2;
console.log(arguments[0]); //2
// 就是说a的值变得时候 arguments[0]的值也变了
// 那么当arguments[0]的值变得时候
arguments[0] = 3
console.log(a); //3
// a的值也变了
// 但是他俩不是同一个变量 这就是系统里的映射规则
}
sum(1,2)
当所谓的映射不存在是什么样子呢
function add(a,b){
b = 2;
console.log(arguments[1]); //undefined
console.log(arguments[0]); //1
a = 3;
console.log(arguments[0]); //3
arguments[0] = 4;
console.log(a); //4
}
add(1)
在这段代码中我们可以看到,只传了一个实参,那么它对应的形参a和这个实参会跟着映射的规则,但是b和arguments[1]就没有出现映射的现象。
return
函数的变量可以通过参数接收,还可以使用return。
return作用之一: return以下的代码不执行了
function sum(a,b){
console.log('a');
return
console.log('b'); //这个语句没有执行
//最后只返回一个 a
}
sum(1)
return作用二:返回值
function sum(){
return 123;
}
//这个时候需要定义一个变量来接收这个返回值
var num = sum()
console.log(num); //123
// 而且在这个函数里面return起到了两个作用 既阻止了函数体内return下面的方法执行 又起到了返回值的作用
小例子 将target转换成数字
function myNumber(target){
var num = Number(target)
return num
}
var num1 = myNumber(true)
console.log(num1); //1
return不是必须执行的 按需存在
注意:return后面可以为任意数据类型 也可以是表达式 但是函数的返回值为表达式返回的结果