JS小白系列之函数
最近又学习了函数相关的内容,虽然作为一个菜鸟但还是想把自己的一些心得记录下来,第一次发文章哪里有说的不好的还请各位大神指出来。
函数在JS中的地位是举足轻重的,我们使用函数的目的,说白了就是把一些代码整理在一起以便将来执行或者说复用。
函数的分类
在JS中函数可以分为具名函数和匿名函数两大类,需要注意的是:只有具名函数才可以单独存在而匿名函数不可以,除非它是立即执行的。
函数的定义
函数的定义通常有两种形式,一种是函数声明,另一种则是函数表达式,废话不多说下面一起来看一下吧。
这种function + 函数名 的形式就是函数声明,函数的命名规则同样也符合变量的命名规则。
这种等号右侧是一个function然后再赋值给一个变量的形式就叫做函数表达式。那么这两种定义形式有什么区别呢?下面请看
从上面可以看出fn执行后可以正常输出并不会报错,也就是说通过函数声明定义的函数可以先调用再声明,而函数表达式这种方式定义的函数则不允许,必须先声明后使用。另外有时候多人开发的过程中我们可能会定义一些全局变量,很容易出现覆盖别人的变量的情况,同时我们开发过程中能不定义全局变量就不定义,这个时候函数就派上用场了。ES5的函数作用域的方式:
通过这种函数执行的形式,你写的代码将不会存在一个全局变量,也不会再影响别人写的代码。而到了ES6,新增了块作用域,你只需要把代码写在一对花括号内,这种也能达到上面的效果。需要注意的是:var不能识别块作用域,所以var声明的变量还是会暴露到全局作用域中。
不定参arguments
函数可以定义参数接收对应的值并对其进行各种操作这里就不说明了。ES5函数内部有一个关键字叫做arguments用来接收对应的实参,因为有时候会存在实参个数不确定的情况,就会导致形参个数也不确定,这个时候arguments就派上用场了。简单举个例子求传入数字的和并返回:
这个时候通过使用arguments就简单的实现了求和的功能,那么在ES6中要实现相同的功能应该是怎么办呢?
剩余参数
在ES6中没有不定参的说法,要实现同样的功能可以使用剩余参数。
这个时候可以看到一样的实现了相同的功能你发现你写的更少了。那么arguments和剩余参数的区别又是什么呢?
从上面可以看到,arguments会吧传入进来的参数按照顺序全部存一遍,而ES6的剩余参数只接收剩余的没有对应的形参接收的值,这就是它们最直接的区别。
箭头函数
- 首先第一点就是function +函数名的定义形式没有箭头函数的写法,我们可以这样定义一个箭头函数
- 需要注意的是,箭头函数是没有this的,箭头函数内部的this指向父级环境的this
- 箭头函数简洁写法
今天暂时就分享到这里啦,水平有限写的比较浅还望大家不要介意,喜欢的朋友帮忙点个赞哦。