一、定义函数
// 直接函数写法
function Add()
{ var a,b; return a+b;}
//匿名函数
var x=function(a,b)
{ return a+b;};
//下面这个函数是个匿名函数,它没有函数名字,这个匿名函数赋值给变量x,
它通过变量来调用函数
- 注意:这两种完全等价,记得给下面函数的花括号后面加;,表示语句结束
二、调用函数
- 格式:
函数名(参数) - 由于JavaScript允许传入任意个参数而不影响调用,因此传入的参数比定义的参数多也没有问题,虽然函数内部并不需要这些参数:
abs(10);
abs(10, 'blablabla'); // 返回10
abs(-9, 'haha', 'hehe', null); // 返回9
- 传入的参数比定义的少也没有问题:
abs(); // 返回NaN
- 总结:
<!DOCTYPE html>
<html>
<head>
<script>
function lod()
{ alert("页面打开时候!")}
// 直接函数写法
function Add(a,b)
{ return a+b;}
//匿名函数
var x=function(a,b)
{
alert(typeof a);
return a+b;
}
alert(Add(10,9));
alert(x(12,3));
</script>
</head>
<body onload="lod()"></body>
</html>
三、观测函数的参数
- arguments
- JavaScript还有一个免费赠送的关键字arguments,它只在函数内部起作用,并且永远指向当前函数的调用者传入的所有参数。arguments类似Array但它不是一个Array:实际上arguments最常用于判断传入参数的个数。你可能会看到这样的写法:
function abs()
{
if (arguments.length === 0)
{
return 0;
}
var x = arguments[0];
return x >= 0 ? x : -x;
}
abs(); // 0abs(10);
// 10 abs(-9); // 9
foo(a[, b], c)// 接收2~3个参数,b是可选参数,如果只传2个参数,b默认为
null:function foo(a, b, c)
{if (arguments.length === 2)
{
// 实际拿到的参数是a和b,c为undefined c = b;
// 把b赋给c
b = null;
// b变为默认值 }
// ... }
arguments.length:判断传入参数的个数
arguments[i]:来查看传入参数的具体值
ES6标准引入了rest参数:
rest参数由于JavaScript函数允许接收任意个参数,于是我们就不得不用arguments来获取所有参数:
为了获取除了已定义参数a、b之外的参数,我们不得不用arguments,并且循环要从索引2开始以便排除前两个参数,这种写法很别扭,只是为了获得额外的rest参数,有没有更好的方法?
如果传入的参数连正常定义的参数都没填满,也不要紧,rest参数会接收一个空数组(注意不是undefined)。
function foo(a, b, ...rest)
{ console.log('a = ' + a);
console.log('b = ' + b);
console.log(rest);
}
foo(1, 2, 3, 4, 5);
// 结果:// a = 1// b = 2// Array [ 3, 4, 5 ]foo(1);
// 结果:// a = 1// b = undefined// Array []
- 例子:
function Max(a,b,...reset)
{ console.log("a:"+a);
console.log("b:"+b); c
onsole.log(reset);}
Max(10,9,8,7,10,9);
</script>
*注意:
rest参数只能写在最后,前面用…标识,如果传入的参数连正常定义的参数都没填满,也不要紧,rest参数会接收一个空数组(注意不是undefined)。