저장을 습관화
이번 주에 공부하고 싶은 것 본문
1. 브라우저 저장소, 로컬 스토리지 혹은 웹 스토리지
https://www.daleseo.com/js-web-storage/
[자바스크립트] 웹 스토리지 (localStorage, sessionStorage) 사용법
Engineering Blog by Dale Seo
www.daleseo.com
2. module화 - import와 export
현재 상황
예를들어 a.html과 b.js, c.js를 가지고 있음
a.html에서
<script src="./b.js"></script>
<script src="./c.js"></script>라고
두 js 파일을 쓰겠다고 표시해주었음
b.js에서 const로 변수 test를 선언해주었고 export는 하지 않았음
c.js에서 import를 쓰지 않았는데 c.js가 변수 test를 사용할수 있는 상황임
왜???
chatgpt에게 물어봤음
ChatGPT: 일반적으로 자바스크립트에서 서로 다른 파일에 있는 변수나 함수 등을 사용하기 위해서는 `import`와 `export` 구문을 사용하여 모듈을 정의하고 가져와야 합니다. 이를 통해 파일 간의 의존성을 명시적으로 선언하고, 다른 모듈의 내용을 사용할 수 있습니다. 그러나 웹 브라우저에서 실행되는 자바스크립트에서는 모듈 시스템을 지원하는 브라우저가 제한적이었습니다. 과거에는 `import`와 `export` 구문을 지원하지 않는 브라우저가 많았기 때문에, 단일 파일로 구성된 스크립트에서는 별도의 모듈 시스템 없이도 전역 범위에서 변수나 함수를 공유할 수 있었습니다. 따라서, 예시로 제시해주신 상황에서 a.js와 b.js가 모두 a.html에서 로드되는 단일 파일로 구성되어 있다면, 브라우저에서는 자바스크립트 파일들이 하나의 전역 범위에서 실행되기 때문에 b.js에서 a.js에 선언된 변수를 직접 사용할 수 있습니다. 하지만 이는 전역 범위의 오염과 충돌 등 여러 가지 문제를 야기할 수 있으므로, 모듈 시스템을 사용하여 명시적인 의존성 관리와 모듈 간의 격리를 실현하는 것이 좋습니다. 최신 브라우저는 모듈 시스템을 지원하므로 `import`와 `export`를 사용하여 모듈을 구성하고 가져올 수 있습니다. 나: 무슨 의미인지 이해하지 못하겠어. 내가 예시로 든 상황에선 a.js 와 b.js는 서로 구분된 별개의 파일이었고 단일 파일이 아니었어. 또한 import와 export로 모듈화 또한 하지 않았고. ChatGPT: 죄송합니다. 이해에 혼동을 드린 것 같습니다. 제가 이해를 잘못하고 답변을 드린 것 같습니다. 예시로 든 상황에서 a.js와 b.js는 서로 별개의 파일이며, import와 export로 모듈화되지 않았습니다. 따라서, a.js와 b.js 파일은 독립적으로 동작하며 서로의 변수나 함수를 사용할 수 없습니다. a.js에서 선언된 변수를 b.js에서 사용하기 위해서는 해당 변수를 export하여 외부에서 접근 가능하게 만들고, b.js에서는 해당 변수를 import하여 사용해야 합니다. 다시 한 번 사과드리며, 이해를 혼동시켜 드려 죄송합니다. 필요한 경우에는 모듈화와 import/export를 사용하여 파일 간의 상호작용을 구현해야 합니다. 나: 그런데 지금 두 js 파일이 서로의 변수를 공유할 수 있었던 이유가 궁금한거야 어떻게 이런일이 가능한거지? a.html 파일에서 a.js파일과 b.js 파일을 <script src="">로 명시하고 있어서인가? ChatGPT: 네, 맞습니다. 두 개의 JavaScript 파일(a.js와 b.js)이 모두 a.html 파일에서 `<script>` 태그를 통해 명시되어 있기 때문에 변수가 공유될 수 있었습니다. 웹 브라우저는 HTML 파일을 로드하면서 `<script>` 태그 내에 있는 JavaScript 코드를 실행합니다. 이때, a.js와 b.js 파일은 순차적으로 로드되고 실행됩니다. 그 결과, 두 파일에서 선언된 변수는 모두 동일한 전역 스코프에서 공유되게 됩니다. 따라서, a.js에서 선언한 변수를 b.js에서 사용할 수 있는 것은 파일이 같은 HTML 문서에서 동시에 실행되기 때문입니다. 이는 변수가 전역 스코프에서 공유되는 것으로, 변수의 값이 변경되면 다른 파일에서도 변경된 값을 참조할 수 있게 됩니다. 그러나 이러한 방식은 파일 간의 의존성과 네임스페이스 충돌 등의 문제가 발생할 수 있으므로, 일반적으로는 모듈화와 import/export를 사용하여 명시적으로 파일 간의 상호작용을 관리하는 것이 좋습니다. |
이런 답변을 받았음
근데 얘가 이번에도 지맘대로 아무말이나 뱉은건지, 아니면 진짜 html에서 script로 JS파일을 표시해줬다고
두 JS 파일이 서로의 변수를 공유하는지 의심되어 테스트를 해보려고 함
내 생각에 html script에 표시해줬다고 서로 변수 주고받고 하면
js파일이 엄청 많은 프로젝트에서는 충돌이 무조건 날 수밖에 없거든?
PM이 막 아예 변수이름 함수이름을 문서로 정리해서 배포하는거 아니면
=>
230605 TIL - 모듈 Module
0. 에러인가 기능인가 자바스크립트의 module화를 공부하기 위해 기존 프로젝트가 가지고 있던 js파일을 여러개로 쪼개고 있었다. 각 기능별로 1.js, 2.js, 3.js, 4.js로 나누었고(파일 이름은 예시) html
ctrs.tistory.com
230606 TIL - 모듈 Module (2)
0. 지난 이야기 2023.06.05 - [TIL] - 230605 TIL - 모듈 Module // File: 1.html // ...(전략) // ...(후략) // File: 2.js const test = "testString"; // File: 3.js window.alert(test); // file: 4.js const test = "isThisWork?"; 이전 시간에 html 파
ctrs.tistory.com
3. 콜백함수
강의를 처음부터 다시 듣고 정리하자
'공부 > 메모' 카테고리의 다른 글
자바스크립트 주석 사용할때 개꿀팁 - JSDoc (0) | 2023.06.07 |
---|---|
강의 추천 - 코딩애플, 웹개발로 배우는 자바스크립트 기초 (0) | 2023.06.06 |
용어 메모 parameter와 argument (0) | 2023.06.06 |
사용하고 있는 VSC 확장 프로그램 (0) | 2023.06.05 |
추천받은 책 - 모던 자바스크립트 Deep Dive (0) | 2023.06.02 |