JS에서 함수를 만드는 데 큰 혐오가있는 것 같습니다. 이 혐오로 인해 사람들은 영리하고 함수 호출처럼 한 줄에 물건을 유지하기 위해 어리석은 속임수를 사용합니다. 물론 호출의 함수 이름은 추가 문서 역할도합니다. 우리는 까다로운 표현에 주석을 달 수 없습니다. 왜냐하면 그것은 표현의 요점을 잃어 버리기 때문에 그냥 "js 관용구"라고 부르고 갑자기 이해할 수 있습니다.
자바 스크립트는 접근성이 뛰어나 대부분의 사람들은 우리처럼 아침 식사에 대한 사양을 먹지 않습니다. 따라서 그들은 관용구의 숨겨진 가정과 최후의 사례가 무엇인지 이해하지 못할 것입니다.
x = x || 'default_value';
평균 joe는 이것을 이해하지 못하거나 그것이 기본값의 관용구임을 암기했습니다. 둘 다 해 롭습니다. 실제로 후자는 훨씬 더 해 롭습니다. 그는 여기에서 가정과 에지 사례를 이해하지 못할 것입니다. 그는 사양을 읽고 이해하지 않아도됩니다.
내가 그 코드를 볼 때 나는 그것이 있는지 "를 참조 null
하거나 undefined
,이 기본값으로 설정합니다. 그것은 또한 암시 적으로 취급하지만 +0
, -0
, NaN
, false
,와 ""
같은 적합하지 않은 값을. 내가 기억해야 할 것이다 3개월 때 필요 지금부터 나는 아마 그것을 잊을 것이다. "
암시 적 가정은 미래에 버그를 유발할 가능성이 매우 높으며 코드베이스에 이와 같은 트릭이 가득 차면 수정이 어떤 영향을 줄지 생각할 때마다 머릿속에 유지할 가능성이 없습니다. 그리고 이것은 "JS pro"를위한 것입니다. 요구 사항이 처음에 잘못된 값을 받아 들여야하더라도 평균 joe는 버그를 작성했을 것입니다.
새 스 니펫에는 더 익숙한 구문이 있지만 여전히 위의 문제가 있습니다.
당신은 함께 갈 수 있습니다 :
function f(x) {
x = valueOrDefault(x, "default_value");
}
이제 엣지 케이스를 처리하는 매우 복잡한 논리를 가질 수 있으며 클라이언트 코드는 여전히 아름답고 읽기 쉽습니다.
이제 함수를 인수로 전달하는 것과 같은 고급 언어 기능이나 영리한 속임수를 어떻게 구별 || "default"
합니까?
영리한 트릭은 항상 코드를 처음 만들 때 무시할 수있는 숨겨진 가정 하에서 작동합니다. 요구 사항이 변경되었으므로 항상 IIFE를 다른 것으로 수정하지 않아도됩니다. 어쩌면 2020 년에 실제 모듈을 사용할 수 있었을 것입니다.
| 0
또는 ~~num
바닥재에 사용되는 화물 컬트 버전 은 양수 및 32 비트 부호있는 정수 경계를 가정합니다.
|| "default"
모든 잘못된 값은 인수를 전혀 전달하지 않는 것과 같다고 가정합니다.
등등.