一、定义函数

// 直接函数写法
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>

javascript 函数如何调用 js函数怎么调用_调用函数


*注意:

rest参数只能写在最后,前面用…标识,如果传入的参数连正常定义的参数都没填满,也不要紧,rest参数会接收一个空数组(注意不是undefined)。