JS函数基础知识

87 阅读3分钟

写法

若在开发中没有涉及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中的纯函数是指在函数执行过程中,不会对外部状态进行修改,也不依赖于外部状态的函数。

  1. 相同的输入总是产生相同的输出:纯函数的返回值只由其输入参数决定,因此给定相同的输入,纯函数总是返回相同的输出。
  2. 没有副作用:纯函数不会修改传入的参数,也不会改变函数作用域之外的变量、对象或数据结构。
  3. 可以被安全地并行执行:由于纯函数不依赖于外部状态,因此多个纯函数可以并行执行而互不干扰。

优势

  • 由于不会参数副作用,可以安心的编写函数的业务逻辑,而不需要关心传入内容的依赖。
  • 降低产生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,作用域( 绑定的是父级作用域的上下文 。箭头函数表达式更适用于那些本来需要匿名函数的地方,并且它不能用作构造函数。

特点

  1. 简洁的语法:当函数体只有一个表达式时,可以省略大括号和return关键字,当只有一个参数时,可省略小括号。
  2. 自动绑定上下文:箭头函数没有自己的this,它会捕获所在上下文的this值,因此在箭头函数中使用this时,它指向的是定义时所在的对象,而不是调用时的对象。
  3. 没有arguments对象:箭头函数没有自己的arguments对象,但可以访问外围作用域的arguments对象。
  4. 不能用作构造函数:箭头函数不能通过new关键字来实例化,因为它没有自己的this值。
// 写法
const foo () => {}

// 省略大括号和return
const double = (num) => num * 2;