JS--函数
函数的定义
- 方式一
abs()函数的定义如下:
function指出这是一个函数定义;
abs是函数的名称;
(x)括号内列出函数的参数,多个参数以,分隔;
{ ... }之间的代码是函数体,可以包含若干语句,甚至可以没有任何语句。
function abs(x) {
if (x >= 0) {
return x;
} else {
return -x;
}
}
方式二
var abs = function (x) {
if (x >= 0) {
return x;
} else {
return -x;
}
};
注意最后要加一个分好,表示语句结束;
这种没有函数名的定义方式是匿名函数,这个匿名函数赋值给了变量名abs,因此可以使用abs去调用该函数
-
注意点:
一,函数可以传入任意个数个参数,且不会影响函数的调用:例如对于上述定义的函数abs(),调用时可以传多个参数abs(12,'xx',99)。二,函数传入的参数比定义的参数少也可以;对于上述定义的函数abs(),有一个定义的参数,但是我们调用时可以不传该参数,直接调用abs(),此时返回Nan;
三,函数内部对参数类型进行判断,代码如下:
function abs(x) { if (typeof x !== 'number') {//判断参数x是不是'number'类型 throw 'Not a number'; } if (x >= 0) { return x; } else { return -x; } }
四,arguments关键字:
它只在函数内部起作用,并且永远指向当前函数的调用者传入的所有参数。
arguments
类似Array
但它不是一个Array
:function argumentFunc (x, y, z) { for (var i=0;i<arguments.length; i++) { console.log(arguments[i]); } // parm 是对应下标,不是对应元素值 for (var param in arguments) { console.log(param + '-----' + arguments[param]); } } argumentFunc(10,20,30); 输出: 10 20 30 0-----10 1-----20 2-----30
实际上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参数只能写在最后,前面用...标识,用法如下
//resert参数
function resetParamsFunction(x,y,z,...rest) {
console.log(rest);
}
resetParamsFunction(1,2,3,4,5,6,7,8, 'zzz','yyy','xx',);//输出:[ 4, 5, 6, 7, 8, 'zzz', 'yyy', 'xx' ],
六,特别注意return
JavaScript引擎有一个在行末自动添加分号的机制,所以下面这个函数是有问题的
function foo() {
return
{ name: 'foo' };//return 和 返回值分行写,则永远不会返回该值,直接返回undefined
}
网友评论