/**********************************************************************
** author : Bugliu
** date : 2018-12-06
** description : 函数-定义及调用
** 学习网站 : www.liaoxuefeng.com
**********************************************************************/
// 函数 取绝对值
function abs(x){
if(x>=0){
return x;
}else{
return -x;
}
}
console.log( abs(-5) ); //5
// 函数没有return语句,函数执行完毕后返回结果为undefined
// JS的函数也是一个对象,上述定义的abs()函数实际上是一个函数对象,
// 而函数名abs可以视为指向该函数的变量。
var abs = function(x) {
if ( x>=5 ){
return x;
}else{
return 0;
}
};
console.log( abs(4) ); //0
// 上述function是一个匿名函数,它没有函数名,可将匿名函数赋值给某个变量
// 通过这个变量调用此函数,匿名函数赋值语句最后的;不要忘记。
// JS允许传入任意个参数而不影响调用,比定义的参数多或少都没关系。
console.log( abs(4, 'x', 'y') ); // 0
console.log( abs() ); // 0 测试记过不是NaN,奇怪
// 增加参数类型检查
function func(x){
if( typeof x !== 'number' ){
throw 'not a number';
}
if (x > 0){
return x;
}
return 0;
}
console.log( func(2) ); //2
console.log( func('aa') ); //not a number
/*
JavaScript还有一个免费赠送的关键字arguments,它只在函数内部起作用,
并且永远指向当前函数的调用者传入的所有参数。arguments类似Array但
它不是一个Array
*/
function foo(x){
console.log(x);
for(var i=0; i<arguments.length; i++){
console.log(`arg ${i}=${arguments[i]}`);
}
}
foo(10,20,30);
/* 执行结果
10
arg 0=10
arg 1=20
arg 2=30
*/
// 即使函数不定义任何函数,还是可以获取到参数的值
function t(){
if(arguments.length===0){
return 0;
}
return arguments[0];
}
console.log( t(10) ); // 10
// 可用rest获取除已定义的其他参数
function foo(a, b, ...rest){
console.log(`${a}--${b}--${rest}`);
}
foo(1, 2, 3, 4, 5); //1--2--3,4,5
// 如传入的参数连正常定义的参数都没填满,也不要紧,rest参数会接收
// 一个空数组(注意不是undefined).
foo(1); //1--undefined--
// return 语句一定要小心使用,js引擎有一个在行末自动添加分号的机制
function foo(){
return{ name:'foo' };
}
console.log( foo() ); //name: "foo"
// 如return语句拆分为两行
function foo(){
return // JS在此行后自动添加分号
{ name:'foo' };
}
console.log( foo() ); //undefined
JavaScript 学习笔记8_函数-定义及调用_20181206
最新推荐文章于 2024-04-28 06:48:00 发布