의 의미 var
및let
var
그리고 let
기계와 다른 프로그래머에게 진술합니다.
나는이 과제의 가치가 실행 과정에 따라 변하기를 원합니다. 이 과제의 최종 가치에 의존하지 마십시오.
var
및 사용의 의미let
var
과 let
프로그램의 실행에 그 시점에서 할당의 가치에 대한 최종 사용에 선언하고, 이유에서 모든 중간에 코드를 읽는 다른 프로그래머를 강제로.
ESLint 및 기타 언어 서비스가 나중에 할당 할 때 잘못 입력 된 변수 이름을 올바르게 감지하고 내부 범위가 선언하지 못한 외부 범위 변수 이름의 범위 재사용을위한 기계 추론을 약화시킵니다.
또한 런타임이 모든 코드 경로에 대해 많은 반복을 실행하여 실제로 상수이기 때문에이를 최적화하기 전에 감지합니다. 이것은 버그 감지 및 개발자의 이해력보다 문제가 적습니다.
사용시기 const
참조 값이 실행 과정에서 변경되지 않으면 프로그래머의 의도를 표현하는 올바른 구문은 const
입니다. 객체의 경우 참조 값을 변경하면 참조는 변경할 수 없지만 객체는 변경할 수 없으므로 다른 객체를 가리키는 것을 의미합니다.
" const
"개체
객체 참조의 경우 포인터를 다른 객체로 변경할 수 없지만 const
선언에 만들어지고 선언 된 객체 는 변경할 수 있습니다. const
참조 된 배열 에서 항목을 추가 또는 제거 하고 const
참조 된 객체의 속성 키를 변경할 수 있습니다 .
불변의 객체를 달성하기 위해 (사람과 기계에 대해 코드를 쉽게 추론 할 수 Object.freeze
있도록) 선언 / 할당 / 창조에서 객체를 다음과 같이 할 수 있습니다.
const Options = Object.freeze(['YES', 'NO'])
Object.freeze는 성능에 영향을 주지만 다른 이유로 인해 코드가 느려질 수 있습니다. 프로파일 링하고 싶습니다.
상태 머신에서 변경 가능한 객체를 캡슐화하고 딥 카피를 값으로 반환 할 수도 있습니다 (이것이 Redux 및 React 상태 작동 방식). 첫 번째 원칙에서이를 빌드하는 방법에 대한 예제는 브라우저 JS에서 변경 가능한 글로벌 상태 방지를 참조하십시오 .
언제 var
그리고 let
잘 어울리는가
let
및 var
변경 가능한 상태를 나타냅니다. 내 의견으로는 실제 변경 가능한 상태 를 모델링하는 데만 사용해야합니다 . " 연결이 살아 있습니까? "
이들은 " 연결의 현재 상태 "를 나타내는 상수 값을 노출하는 테스트 가능한 상태 머신에 가장 잘 캡슐화되어 있으며 , 이는 어느 시점에서나 일정하며, 코드의 나머지 부분에 실제로 관심이있는 항목입니다.
부작용을 작성하고 데이터를 변환하는 데 프로그래밍이 이미 충분히 어렵습니다. 변수를 사용하여 변경 가능한 상태를 생성하여 모든 기능을 테스트 할 수없는 상태 머신으로 전환하는 것은 복잡성에 있습니다.
더 미묘한 설명은 Shun the Mutant-The case for를const
참조하십시오 .