JavaScript函数笔记by-Lying
本笔记资源来自廖雪峰的官方网站
- 定义函数的两种方式
function abs(x) {
if (x >= 0) {
return x;
} else {
return -x;
}
}
var abs = function (x) {
if (x >= 0) {
return x;
} else {
return -x;
}
}; //要加分号
- 可以传入任意个参数,不会影响调用;
abs(10, 'blablabla'); // 返回10
abs(-9, 'haha', 'hehe', null); // 返回9
abs(); // 返回NaN
//此时abs(x)函数的参数x将收到undefined,计算结果为NaN。
//要避免收到undefined,可以对参数进行检查
function abs(x) {
if (typeof x !== 'number') {
throw 'Not a number';
}
if (x >= 0) {
return x;
} else {
return -x;
}
}
arguments
JavaScript在函数内部有一个关键字arguments,永远指向当前函数的调用者传入的所有参数(类似array但不是array),最常用于判断传入参数的个数;
可通过arguments判断,将某参数设为可选参数;
// 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变为默认值
}
// ...
}
rest
ES6标准引入rest参数;
rest只能写在最后,前面用…标识,传入的参数先绑定前面定义的参数,多余的参数以数组形式传给变量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 []
- JavaScript的嵌套函数中,如果内部函数定义了与外部函数重名的变量,则内部函数的变量将“屏蔽”外部函数的变量。