Observable, 순진한 구현

3086 단어
스트림에 대한 이전 게시물에 이어 스트림이 기본적으로 무엇인지 궁금할 수 있습니다.

가장 기본적으로 스트림은 관찰할 수 있는 객체에 불과하며 실제로는 관찰할 수 있습니다.

많은 객체를 관찰할 수 있으며 스트림의 특수성은 구성 가능한 관찰 가능하다는 것입니다.

아주 간단한 옵저버블을 구현할 수 있는지 봅시다.

요구 사항은 다음과 같습니다.
  • 기능만 사용(클래스 없음, 프록시 없음...)
  • 전달된 값을 저장해야 합니다.
  • 호출은 저장된 값을 반환해야 합니다.
  • 전역 없음

  • 함수가 어떻게 값을 저장할 수 있습니까? 조금 이상해 보입니다. 스트림은 기본 기능이 아닌 것 같습니다...

    다음 함수는 아무것도 저장하지 않습니다.
    인수 없이 호출하면 아무 것도 반환하지 않습니다.

    function stream (value) {
        let storedvalue = value
        return storedvalue
    }
    

    그러면 우리는 무엇을 할 수 있습니까? 클로저라는 자바스크립트의 특정 기능을 사용할 것입니다.

    클로저를 사용하는 것은 간단합니다. 클로저가 내부적으로 어떻게 작동하는지에 대한 설명은 제 지식을 넘어서는 것입니다.

    여기 있습니다:

    function Stream (value) {
      let storedvalue = value
      function stream (newvalue) {
        if (arguments.length) {
          storedvalue = newvalue
        }
        return storedvalue
      }
      return stream
    }
    
    let s = Stream(5)
    
    console.log(s())
    

    여기에서 테스트할 수 있습니다stream.

    Javascript에서 함수는 일급 시민입니다. 그것들은 다른 객체처럼 취급됩니다.
    다른 함수에 인수로 전달할 수 있으며 함수에서 반환할 수 있습니다.

    클로저를 사용하면 반환된 함수가 외부에 정의된 변수를 '캡처'할 수 있습니다. 마술 :-)

    이 함수는 요구 사항을 충족합니다. 다음 게시물에서 스트림에 새 값이 "공급"될 때마다 "반응"하는 방법을 살펴보겠습니다.

    읽어 주셔서 감사합니다

    좋은 웹페이지 즐겨찾기