函数的定义的四个注意部分,定义的两种方式及其分号结尾的情况,函数参数的2个关键字(arguments,rest),return正确写法
发布日期:2021-06-29 11:42:47
浏览次数:3
分类:技术文章
本文共 1630 字,大约阅读时间需要 5 分钟。
上述abs()
函数的定义如下:
function
指出这是一个函数定义;abs
是函数的名称;(x)
括号内列出函数的参数,多个参数以,
分隔;{ ... }
之间的代码是函数体,可以包含若干语句,甚至可以没有任何语句。结尾没有分号。
function abs(x) { if (x >= 0) { return x; } else { return -x; }}
如果没有return
语句,函数执行完毕后也会返回结果,只是结果为undefined
。由于JavaScript的函数也是一个对象,上述定义的abs()
函数实际上是一个函数对象,而函数名abs
可以视为指向该函数的变量。第二种定义函数的方式如下:注意第二种方式按照完整语法需要在函数体末尾加一个分号;
表示赋值语句结束。
var abs = function (x) { if (x >= 0) { return x; } else { return -x; }};
由于JavaScript允许传入任意个参数而不影响调用,当传入的参数比定义的参数多时,函数内部并不需要多余的这些参数;当传入的参数少时,未定义的参数的值为undefined,那么计算结果为NaN:
abs(); // 返回NaN
要避免收到undefined
,请对参数进行检查:
function abs(x) { if (typeof x !== 'number') { throw 'Not a number'; } if (x >= 0) { return x; } else { return -x; }}
利用arguments
,你可以获得调用者传入的所有参数。也就是说,即使函数不定义任何参数,还是可以拿到参数的值;实际上arguments
最常用于判断传入参数的个数。arguments
类似Array
但它不是一个Array。
function foo(x) { console.log('x = ' + x); // 10 for (var i=0; i
利用rest参数可以获取多余的参数。它只能写在最后,前面用...
标识,从运行结果可知,传入的参数先绑定a
、b
,多余的参数以数组形式交给变量rest
,所以,不再需要arguments
我们就获取了全部参数。如果传入的参数连正常定义的参数都没填满,也不要紧,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 []
return正确的写法,是下面两种:
function foo() { return { name: 'foo' }; // 第一种和返回参数在同一行}foo(); // { name: 'foo' }function foo() { return { // 第二种,一定要加{,那么这里不会自动加分号,因为{表示语句尚未结束 name: 'foo' };}function foo() { return // 错误的方式,这里识别为一个语句,那么会自动添加分号,相当于return undefined; { name: 'foo' }; // 这行语句已经没法执行到了}
转载地址:https://blog.csdn.net/zz2230633069/article/details/108192737 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月04日 17时25分55秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
欧式距离、余弦相似度和余弦距离
2019-04-29
transform 等效转换(参考源码)
2019-04-29
cv2 PIL区别笔记
2019-04-29
C#中的委托
2019-04-29
引用类型和值类型
2019-04-29
一个合格程序员该做的事情——你做好了吗?
2019-04-29
再谈如何表现已点击的链接2
2019-04-29
多线程消息队列 (MSMQ) 触发器
2019-04-29
WCF开发简简单单的六个步骤
2019-04-29
4.23数学作业答案
2019-04-29
4月24语文作业答案
2019-04-29
4.26数学作业
2019-04-29
4月26云纹作业
2019-04-29
4.27数学作业提示
2019-04-29
4.27数学练习册答案
2019-04-29
4.27语文答案
2019-04-29
4.29图二
2019-04-29
5.6语文笔记
2019-04-29
5.13数学练习册讲解
2019-04-29
5.15第三题答案
2019-04-29