定义
JavaScript 函数是被设计为执行特定任务的代码块。会在某代码调用它时被执行。
实例
function abs(x) {
if (typeof x !== 'number') {
throw 'Not a number';
}
if (x >= 0) {
return x;
} else {
return -x;
}
}
函数赋值给变量
js的函数本质也是一个对象,因此可以赋值给变量。
var abs = function (x) {
if (x >= 0) {
return x;
} else {
return -x;
}
};
function (x) { … }是一个匿名函数,它没有函数名。但是,这个匿名函数赋值给了变量abs,所以,通过变量abs就可以调用该函数。这种方式和直接命名函数是等价的。
不加()调用函数
不加()使用函数,返回的是函数对象的声明。
<p id="demo"></p>
<script>
function toCelsius(f) {
return (5/9) * (f-32);
}
document.getElementById("demo").innerHTML = toCelsius;
</script>
上边代码返回:
function toCelsius(f) { return (5/9) * (f-32); } //<p id="demo"></p>的内容
函数调用
函数调用的时候,传入任意个参数并不会影响调用,因此传入的参数比定义的参数多也没有问题。如果参数传的少。未传的参数默认为undefined
单数js有个关键字arguments,可以获取传递的参数。它只在函数内部起作用,并且永远指向当前函数的调用者传入的所有参数。arguments类似Array但它不是一个Array:
function foo(x) {
console.log('x = ' + x); // 10
for (var i=0; i<arguments.length; i++) {
console.log('arg ' + i + ' = ' + arguments[i]); // 10, 20, 30
}
}
foo(10, 20, 30);
不传参数也可以获取到值, 我们经常用它判断入参的个数:
function abs() {
if (arguments.length === 0) {
return 0;
}
var x = arguments[0];
return x >= 0 ? x : -x;
}
abs(); // 0
abs(10); // 10
abs(-9); // 9
我们用rest参数表示剩余的参数。rest参数只能写在最后,前面用…标识
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 []