写法
若在开发中没有涉及this问题,建议使用箭头函数写法。
// 普通写法
function sayHello() {
console.log('Hello')
}
// es6 箭头函数写法
const sayHello = () => console.log('Hello')
arguments
arguments是函数的内置对象它是一个类数组对象, 包含所有传递给函数的参数 。它拥有一些数组的特征如,例如:length和index,获取长度和索引访问。但不具有数组的push()、pop()等方法。
arguments转Array的方式:Array.from(arguments) [...arguments]。另外,箭头函数没有arguments
函数剩余参数
- ES6中用于替代arguments。
- 必须放在函数形参列表中的最后, 否则报错,以 '...' 为前缀。
- args是真正的数组。
function myFunction(...args) {
console.log(args); // 输出一个包含所有传递给函数的参数的数组
}
myFunction(1, 2, 3); // [1, 2, 3]
myFunction("a", "b", "c", "d"); // ["a", "b", "c", "d"]
纯函数
JavaScript中的纯函数是指在函数执行过程中,不会对外部状态进行修改,也不依赖于外部状态的函数。
- 相同的输入总是产生相同的输出:纯函数的返回值只由其输入参数决定,因此给定相同的输入,纯函数总是返回相同的输出。
- 没有副作用:纯函数不会修改传入的参数,也不会改变函数作用域之外的变量、对象或数据结构。
- 可以被安全地并行执行:由于纯函数不依赖于外部状态,因此多个纯函数可以并行执行而互不干扰。
优势
- 由于不会参数副作用,可以安心的编写函数的业务逻辑,而不需要关心传入内容的依赖。
- 降低产生bug的风险。
// 纯函数-->确定的输入产生确定的输出,不能对外部的变量属性参数影响
const add = (num1, num2) => (num1 + num2)
add(1, 2)
// 非纯函数-->已对函数外的数据进行更改
let args = [1, 2, 3, 4]
const foo = (item) => args.push(item)
foo(5)
重要性
- 纯函数在函数式编程中被广泛使用,比如react中组件就被要求像是一个纯函数、react中的Reducer,也是要求必须是纯函数。
- 所以掌握纯函数对于理解很多框架的设计是非常有帮助的
箭头函数
在ES6中提供了一种更简洁的方式来定义函数。 并且没有自己的this , arguments,作用域( 绑定的是父级作用域的上下文 ) 。箭头函数表达式更适用于那些本来需要匿名函数的地方,并且它不能用作构造函数。
特点
- 简洁的语法:当函数体只有一个表达式时,可以省略大括号和return关键字,当只有一个参数时,可省略小括号。
- 自动绑定上下文:箭头函数没有自己的this,它会捕获所在上下文的this值,因此在箭头函数中使用this时,它指向的是定义时所在的对象,而不是调用时的对象。
- 没有arguments对象:箭头函数没有自己的arguments对象,但可以访问外围作用域的arguments对象。
- 不能用作构造函数:箭头函数不能通过new关键字来实例化,因为它没有自己的this值。
// 写法
const foo () => {}
// 省略大括号和return
const double = (num) => num * 2;