类数组(array-like)转成数组
通过for循环遍历存入新的数组
1
2
3
4var newArguments = []
for (var arg of arguments) {
newarguments.push(arg)
}Array.from() (ES6中的方式)
from()中传入一个可迭代对象
var newArgs1 = Array.from(arguments)
...
的语法 (ES6中的方式)var newArgs2 = [...arguments]
使用slice()方法
var newArgs3 = [].slice.apply(arguments)
var newArgs3 = Array.prototype.slice.apply(arguments)
slice也可以说是一种浅拷贝的方法。
slice不会对原数组进行修改,而是返回一个新数组。(纯函数)
splice会返回一个新数组,也会对原数组进行修改。
箭头函数中没有arguments
纯函数的作用和优势
可以安心的编写和安心的使用
有确定的输入就有确定的输入,不需要依赖外部的参数和变量。
柯里化
柯里化函数是将接收的多个参数的函数转变成接收单个参数的函数,并且返回余下参数,而且返回结果的新函数的计数.
1 | function foo(x,y,z) { |
优势
函数的职责单一
每一个函数都有自己的职责,与剩余的函数/参数无关
函数参数的复用
1 | var foo = x => { |
组合函数
with
扩展一个语句的作用域链
1 | var obj = { |
tips:不建议使用,产生作用域混淆和兼容性的问题
eval
将所传入的字符串作为一段JS代码来执行
将最后一行作为返回值结果
1 | var message = `var name = 'beichen'; console.log(name)` |
tips:也不怎么用,了解就行了
- 可读性差
- eval必须经过JavaScript解释器,不能被JS引擎优化
- eval是一个字符串,有可能在执行过程中被可以篡改,那么可能会造成攻击的风险