Case 3
한파일에서default export는하나만가능합니다. export default 로이
미export를한후에다른함수나변수를export하기 위해서는import할때
다음과 같은방법을사용해야합니다.
export default function hello() {
console.log(`module1`);
}
export let name = "jbee";
import module1, { name } from './module1';
module1();// module1
console.log(name);// jbee
name 이라는변수를import하는경우에는반드시 name 이라는변수명으로
import해야겠죠? 다음의경우에는어떻게 될까요?
9.
Case 3‑1
import module1,{ name } from './module1';
module1();// module1
console.log(name);// jbee
name = "newName"; //SyntaxError!
import한name을다시정의하려고 하면SyntaxError가 발생합니다. import
된 name 이란변수는 read-only 속성이적용되기 때문입니다. 만약에다
음과 같은경우는어떻게 해야할까요?
10.
Case 3‑2
export constname = "jbee";
export const name = "newName";
다른자바스크립트파일에서같은변수명을사용한경우입니다. 기존의방식대
로import를해볼까요?
import { name } from './module1';
import { name } from './module2';
default로export되지않은함수또는변수에대해서는반드시그 이름을지정
해야했습니다. 이럴경우에는 Duplicate declaration 에러가 발생합니
다.
11.
Case 4
위에서발생한문제를해결하기 위한첫번째방법입니다.
import{ name as module1Name} from './module1';
import { name as module2Name} from './module2';
console.log(module1Name);
console.log(module2Name);
as 라는키워드가 등장했습니다. alias 의줄임으로import한변수또는함
수에대해별명을지정할수있습니다. 이렇게 import를하면변수명끼리충돌
이일어나지않습니다:) 그러나변수명이점점많아지게 되면계속해서새로운
변수명을지정해줘야하는문제점이발생하게 됩니다.
12.
Case 5
위의문제를조금 더개선해보겠습니다:)
import* as Module1 from './module1';
import * as Module2 from './module2';
console.log(Module1.name);
console.log(Module2.name);
as 키워드를사용함과 동시에 * 이등장했습니다. * 은import하고자하는
자바스크립트파일에서 export 키워드가 붙어있는모든함수, 변수를
import할때사용합니다. 그리고 as 키워드를통해서 namespace 를지정
해줘야합니다. 이렇게 import가 되면 Module1 이라는객체의프로퍼티로
import한변수또는함수에접근할수있습니다.
4) import 구문은호이스팅됩니다.그러므로import문은모두상단에위
치시키세요!
// bad
import foo from 'foo';
foo.init();
import bar from 'bar';
// good
import foo from 'foo';
import bar from 'bar';
foo.init();