>웹 프론트엔드 >JS 튜토리얼 >JavaScript 함수형 프로그래밍(코드)의 순수 함수 이해

JavaScript 함수형 프로그래밍(코드)의 순수 함수 이해

不言
不言앞으로
2019-03-15 14:35:352485검색

이 기사는 JavaScript 함수형 프로그래밍의 순수 함수(코드)에 대한 이해를 제공합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

함수형 프로그래밍에서 순수 함수를 이해하려면?

개념: 실행 컨텍스트에 의존하지 않으며 컨텍스트의 변수에 영향을 주지도 않습니다. 출력은 입력에 의해서만 결정됩니다.

코드를 이해하세요

// 综上,非纯函数,输入依赖外部变量
let b = 1
function unPure(a) {
    return a + b
}

// 综上,非纯函数,输出改变外部变量
let o = {}
function unPure(object) {
    object.ex = 1
    return object
}

// 综上, 纯函数, 输出输入不影响外部变量
function pure(a) {
    let b = 1
    return a + b
}

순수함수의 장점

찾으실 거라 믿습니다. 개념도 코드 이해도 매우 간단한데 왜 순수함수를 사용할까요? 아래에는 순수 함수 사용의 이점이 나열되어 있습니다

  • Cacheability
  • Portability
  • Testability
Cacheability

순수 함수는 입력을 기반으로 캐시될 수 있습니다

// 下面的代码我们可以发现相同的输入,再第二次调用的时候都是直接取的缓存
let squareNumber  = memoize((x) => { return x*x; });
squareNumber(4);
//=> 16
squareNumber(4); // 从缓存中读取输入值为 4 的结果
//=> 16
squareNumber(5);
//=> 25
squareNumber(5); // 从缓存中读取输入值为 5 的结果
//=> 25

어떻게 구현할까요? 아래 코드를 살펴보세요

const memoize = (f) => {
  const cache = {};
  return () => {
    var arg_str = JSON.stringify(arguments);
    // 关键就在这里,我们利用纯函数相同输入相同输出的逻辑,在这里利用cache做一个简单的缓存,当这个参数之前使用过时,我们立即返回结果就行
    cache[arg_str] = cache[arg_str] || f.apply(f, arguments);
    return cache[arg_str];
  };
};
이식성

일반 언어로 이식성은 프로젝트 A에서 사용했다면 프로젝트 B에서 사용하고 싶다면 그냥 가져오면 됩니다

코드를 다시 이해합시다

// 我们注意看下方有两个注册的函数

// 不纯的, 如果B项目想要用到这个函数,很显然我们将其依赖的其它服务给搬过去
const signUp = function(attrs) {
  var user = saveUser(attrs);
  welcomeUser(user);
}
// 纯的, 我们再来看看下面这个纯函数写法,纯函数给了我们足够多的信息,我们想在B项目使用其功能只需将单个方法搬过去再给其注入需要的参数即可
const signUp = function(Db, Email, attrs) {
  return function() {
    var user = saveUser(Db, attrs);
    welcomeUser(Email, user);
  };
};
테스트 가능성.

요컨대, 이것은 매우 간단합니다. 다른 외부 정보는 신경 쓸 필요가 없습니다. 함수에 특정 입력을 제공하고 출력을 주장하면 됩니다.

요약

  • 출력은 외부 변수에 의존하지 않습니다.
  • 출력은 외부 변수를 변경하지 않습니다.
  • 고정 입력 고정 출력
  • 캐시 가능, 이식 가능, 테스트 가능

위 내용은 JavaScript 함수형 프로그래밍(코드)의 순수 함수 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제