2017-12-31 62 views
-1

상수를 선언하고 기본값으로 내보내거나 기본 내보내기로 직접 선언 할 때 성능면에서 차이가 있습니까? 두 번째 결과는 더 깨끗한 코드가되지만 첫 번째 경우와 똑같이 처리되는지 또는 가져올 때 다른 파일에서 요청할 때마다 생성되는지는 확실하지 않습니다.JS ES6 : const를 선언하고 기본값으로 내보내기 대 차이점을 기본 내보내기로 직접 지정

const myFunction = (a) => { … } 
export default myFunction 

: 그리고

export default (a) => { … } 
함수를 사용

export default { … } 

또는 동일한 예를 들어

이 코드를이 하나의 대

const myValue = { … } 
export default myValue 

답변

0

구현이 ES6 모듈 사양을 완전히 준수하면 큰 차이가납니다. 모듈은 바인딩이 아니라 참조를 내 보냅니다. 이 여기에 설명되어 있습니다 :

https://ponyfoo.com/articles/es6-modules-in-depth#bindings-not-values

에서 (거의) 모든 다른 측면, 자바 스크립트는 순전히 참조를 사용합니다. 변수는 메모리의 실제 데이터에 대한 포인터입니다. 한 변수를 다른 변수에 복사하면 값이 아닌 포인터가 복사됩니다. 변수에 새 값을 할당하면 새 데이터 청크가 만들어지고 변수 포인터가 새 데이터로 이동하고 이전 데이터는 가비지 수집됩니다. 프리미티브가 값에 의해 함수 및 객체에 참조로 전달된다는 일반적인 오해가 있습니다. 그들은 사실 모든 참조에 의해 전달되고, 프리미티브는 변경 불가능하기 때문에 값으로 전달되는 것처럼 보입니다. 원시 값을 변경하면 원래 값을 변경하지 않고 새로운 값을 사용하여 이전 값을 삭제합니다.

그러나 바인딩은 과 동일하며 변수입니다. 어떤 것을 내보내는 경우에는 참조가 아닌 IT를 내보내십시오. 내 보낸 값이 원래 모듈에서 나중에 변경되면이 변경 사항은 모듈을 사용하는 모듈에 반영됩니다. 더 나쁜 것은, 다른 모듈이 바인딩을 변경하면 원래 모듈과 다른 모든 소비 모듈에 다시 반영됩니다.

타사 모듈 가져 오기 도구 또는 롤업 도구를 사용하는 경우 엔진 외부에서 복제하기가 쉽지 않으므로 이러한 동작이 발생하지 않을 수 있습니다. 따라서 앞으로 수개월이나 수개월 동안 이것으로 인한 영향을 볼 수는 없겠지만, 앞으로는 문제가 될 것입니다.

그래서 불쾌한 놀라움을 방지하기 위해 항상 상수를 내보내는 것이 가장 좋습니다.

+0

정말 고마워! 그런 다음이 패턴을 사용합니다. – adrianhurt

0

먼저 특정 변수에 const이 적용됩니다. 해당 변수에 다른 값을 지정할 수 없습니다. 값 자체는 const이 아닙니다. const 측면은 const으로 선언 된 변수 자체에만 적용되며 그 값은 보유하고있는 값입니다. 따라서 귀하의 예에서는 변수에있는 값이 아닌 해당 모듈 내의 실제 myValue 변수에만 적용됩니다. 이것에 따라서

: const하고 const 측면 당신이 myValue 변수에 다른 무언가를 할당 할 수 있음을 의미

const myValue = { … } 
export default myValue 

그것은 myValue 변수 (안 값)입니다. 같은 값을 다른 비 const 변수에 복사하면 원하는 변수를 다른 변수에 자유롭게 할당 할 수 있습니다.

해당 변수의 값을 내 보내면 다른 변수 (가져 오는 변수)에 할당되고 const이라고 선언되어 있지 않으면 const이 아닙니다. 이 모듈의 const은 가져 오는 다른 모듈의 다른 변수에 영향을주지 않습니다.

당신은 논리적으로 수출하고 (수입 모듈에) 다른 변수에 값을 할당로 종류의이 같은 수입 생각할 수 : 이미 당신을 가정 한, CONST을 실현,

// exported value 
const myValue = { … };  // exporting makes it available so others can import it 

// imported value 
let importedValue = myValue; // importing assigns the exported value to a new variable 

// further assignment 
importedValue = "foo";  // this is allowed because importedValue is not 
           // declared as const 

을 그리고 -ness가 myValue이면 importedValue이 아예 없습니다. myValueimportedValue에있는 사본이 포함되어 있으며 원하는 다른 값을 할당 할 수 있습니다. const 자체로 선언되지 않으므로 const이 아닙니다.

상수를 선언하고 기본값으로 내보내거나 기본 내보내기로 직접 선언 할 때 성능면에서 차이가 있습니까?

값 자체가 자바 스크립트에서는 const이 아니기 때문에 내 보낸 값에 차이가 없으며 변수 만 있습니다. 차이점은 const으로 선언 된 로컬 변수에서만 가져 오기 모듈이 액세스 할 수있는 것이 아니며 가져 오기 모듈과 아무런 차이가 없습니다.

이 변수의 값이 중요하지 않는 함수를 사용

또는 동일한 (함수, 객체, 프리미티브 등). 모든 유형과 동일합니다. 변수가 const으로 선언 된 경우 해당 변수에 다른 값을 할당 할 수 없습니다. 그러나 그 값을 const으로 선언되지 않은 다른 변수에 복사하면, 그 이외의 변수에 원하는 것을 할당 할 수 있습니다. 값이 아닌 const 인 변수입니다. const은 읽기 전용 변수를 선언하는 것과 같습니다.

+0

의견을 보내 주셔서 감사합니다. 매우 완벽하지만 제 질문에 대해서는 충분히 정확하지 않다고 생각합니다. 상수가 아니라 수출하기 전에 그것을 선언하는 것이 었습니다. 'const'는 가장 일반적인 패턴이기 때문에 사용했지만,'let' 또는'var'을 사용해서도됩니다. 감사! – adrianhurt