认识arguments
arguments 是一个 对应于 传递给函数的参数 的类数组(array-like)对象.
array-like意味着它不是一个数组类型,而是一个对象类型:
- □但是它却拥有数组的一些特性,比如说length,比如可以通过index索引来访问;
- □但是它却没有数组的一些方法,比如forEach、map等;
arguments常用方法
获取长度的方法.length
通过索引值获取对应数据
通过callee获取arguments所在函数
将arguments转为数组方式
数组调用slice再使用call绑定argument。可实现将argument转为数组。之所以需要这样是因为slice数组中有这个方法,但是argument没有
slice的实现
slice会对数组进行截取,返回一个新的数组。参数有两个,一个为截取起始的下标,而另一个为结尾。确定的输入会产生确定的输出且不会改变原来的数组内容。
1.竟然有两个参数那么就在参数上设定两个,一个start,一个end
2.因为需要处理的数组就是调用slice方法的数组,而根据this的指向可得,创建一个变量arr,接收this,此时this就是调用该函数的数组,也就是需要处理的函数
3.判断截取的start和emd的值是不是null的,如果是的需要将值置为0和数组长,这样一来就相当于不需要截取。如果不为null,就仍然为原来的值
4.定义一个新的数组变量newArray,作为新的数组,接收截取后的数组,最终返回出去
5.以end为边界值,将arr数组中下标为start-end的值通过push放入新建的newArry数组中
6.返回新的数组
注:想要创建得数组可以调用自己写的slice方法,就需要给数组对象Array的prototype中添加自定义的函数。
form方法,可传入一个可迭代的数据或者类数组,最终返回一个新的数组。所以也可以调用该方法实习argument转变成数组
箭头函数没有argument,所以会从上级去找argument。浏览器全局是没有argument,但是node中的全局是会有。所以当箭头函数需要传入多个参数,可以使用...args来接收
理解JavaScript纯函数
纯函数的识别
以下都不是纯函数
函数foo()更改了外部变量name的值,所以不是
有可观察的副作用点击事件,所以不是
副作用的理解
纯函数的案例
这两都不是纯函数
第一个更改了外部name的值所以不是
第二个更改了对象中属性age的值,所以不是
这个是
因为没有更改info原本的内容,返回的是新对象
、