javaScript 96

값(value), 리터럴(literal), 표현식(expression), 문(statement)

# 리터럴(literal) 리터럴은 사람이 알아보는 기호로 적은 표기법을 말한다. 이전 '메모리에 저장되는 기본구조' 포스팅에서 컴퓨터는 데이터를 2진법으로 저장한다고 했었다. 메모리에 저장되는 기본 구조. # 시작하면서 2진법에대해서 되돌아보자. 중학생때 배웠던 2진법을 기억하고 있을것이다. 즉 0,1로 숫자를 표현하는 방법인데 예를들어 0은 10진법 수로 0이다. 1은 10진법수로 1, 10은 10진법 수로 2 jacobowl.tistory.com 숫자로 예를 들어보겠다. 사람은 숫자를 보통 10진법으로 표기한다. 하지만 컴퓨터는 2진법으로 알아듣는다. 즉 우리가 코드로 적는 2라는 수는 2진법 수로 10이고, 3이라는 수는 11이다. 때문에 우리가 코드에 2라는 수를 적으면 자바스크립트 엔진이 이를..

변수 호이스팅, 그리고 초기화 initialize, Temporal Dead Zone

초기화는 변수선언시에 최초로 undefined가 할당이 되는것을 말한다. 먼저 그림으로 살펴보면, let value = 'hello world'; 라는 코드가 실행되면 먼저 식별자 value가 가르키는 메모리주소1이 생성되고 이 주소가 가르키는 메모리공간에는 undefined가 할당된다. 그 후, 이 식별자 value는 메모리주소2를 가르키게되고 이 메모리주소 2가 가르키는 메모리공간에는 'hello world'라는 데이터가 재할당된다. # 먼저 선언하지 않은 변수를 참조해보자. console.log(babo); ReferenceError이 발생된다. 내용은 변수 babo가 정의되지 않았다라는 것이다. # 선언보다 참조를 먼저 하는 경우 var (호이스팅) console.log(babo); var bab..

변수와 메모리의 관계

# 변수 선언과 할당시 메모리 동작 구조. 1 단순히 코드상 1이라는 숫자를 하나 적었다. 그렇다면 메모리에는 어떻게 저장될까? 이 숫자 1이저장된 메모리공간에 메모리주소한개가 부여된다. 그렇다면 아래코드는 어떻게 저장이될까? let number_1 = 1; 1이라는 숫자를 number_1이라는 변수에 할당을 했다. 변수를 사용하면 위 코드에서 number_1이 즉 변수이름 식별자가 되고, 이 식별자는 메모리주소 하나를 가르킨다. 그렇다면 위의 코드를 실행하면 이렇게 구조가 잡힌다고 생각할 것이다. number_1이라는 식별자는 메모리 주소를 가르키고 이 메모리주소가 찾아가는 메모리에는 숫자 1이 저장되어있다. 하지만 이 구조는 틀렸다 자바스크립트는 변수선언시 이렇게 동작을 한다. // let numbe..

메모리에 저장되는 기본 구조.

# 시작하면서 2진법에대해서 되돌아보자. 중학생때 배웠던 2진법을 기억하고 있을것이다. 즉 0,1로 숫자를 표현하는 방법인데 예를들어 0은 10진법 수로 0이다. 1은 10진법수로 1, 10은 10진법 수로 2이다. 이런식으로 0과 1로 숫자를 표현할 수 있는것이다. 컴퓨터에선 메모리 주소 기본단위에 0이나 1을 저장할 수 있는데, 이 기본단위를 '비트'라고 한다. 이렇게 데이터 단위는 기본 Btye로 시작해서 2의 배수대로 커지는 시스템이다. 그럼 1바이트는 0이나 1을 저장할 수 있는 공간이 8개이니, 2^8 = 256 가지의 데이터를 저장할 수 있게된다. # 자바스크립트의 메모리 구조 위 그림처럼 메모리 하나는 1바이트(8비트)의 크기를 가지고 있고 각 셀마다 메모리 주소가 지정되어있다. 컴퓨터는 ..

vue / bootstrap carousel 자동넘기기 설정. $ref

# 문제점 carousel로 배너를 만들었는데, 다음버튼을 눌러야 그 후부터 auto slie가 되더라. 난 이 배너가 일정시간 간격으로 자동으로 사진이 넘어가면서 보이길 바란다. # 예상해결방법 화면이 렌더링된 후, 자동으로 다음버튼을 한번 클릭하게 하면 그 후로는 자동으로 carousel이 넘어갈것같다. # 방법 첫번째로 DOM요소를 js에서 컨트롤하기 위해서 가져와야한다. 여기서 버튼의 ref를 banner_next로 바꾸고 이 DOM을 methos에서 가져올것이다. methods: { click_next: function () { this.$refs.banner_next.click(); }, }, 순서대로 this.$refs.아까정한 ref이름. click() 이 메서드는 아까 정해놨던 넥스트버튼..

javaScript/vueJs 2023.03.20

vue / 파일을 수정했지만 캐시땜에 적용안될때?

내가 만든 웹사이트를 vue로 배포를 했지만, 이것저것 파일을 수정해서 재배포를 할 일이 많을것이다. 여기서 생기는 문제가 클라이언트 브라우저에서 최초 파일을 받아서 저장을 해놓는다면 수정후 배포시에도 최초파일을 사용자브라우저에서 캐시로 저장해놓기때문에 수정사항이 반영이 안될경우가 있다. 매우매우 짜증이 나는 일이다. 그래서 난 여러 방법을 생각해봤는데, 예를들어 라우터 변경시, 매번 서버에 요청을 보내서 버전확인을 한다음 만약 버전이 틀리면 리다이렉트 시키는 방법 등을 생각했었다. 뭐 이것도 가능하긴한데, 서버가 부담이될것같았다(잘모름) 암튼 방법은 이렇다. const { defineConfig } = require("@vue/cli-service"); module.exports = defineConf..

javaScript/vueJs 2023.03.10

vue / 정적경로 단순화하기 public폴더 웹팩

nodejs라면 path모듈로 쉽게 해결을 하겠지만 vue는 js기반으로 돌아가서 경로처리를 어떻게 해야할지 궁금할것이다. 배포를 고려하여 상대경로로 적어야하지만 이렇다면 컴포넌트마다 경로를 다르게해줘야할거다.. 때문에 이를 포스팅한다. # public / vue.config.js const path = require("path"); module.exports = { chainWebpack: (config) => { config.resolve.alias.set("@", path.resolve(__dirname, "public/")); }, 나는 퍼블릭폴더경로를 단순화하고싶다. vue.config.js에서 설정할수있는데 위 코드의 의미는 public폴더를 @로 단순화한다는 것이다. # 컴포넌트에서 불러오기..

javaScript/vueJs 2023.03.10

이미지 경로 가져오기 & 이미지 경로 바인딩 & 반복문

이번 방법은 꽤 애를 먹었었다.. 그래서 기억에 남기고자 포스팅을 한다. # 목적 특정 폴더안에 있는 이미지파일들 이름들(스트링형식)을 어레이에 담은 후, 이 파일들 목록을 상대경로로 가공, 가공한 경로들을 템플릿에서 src에 담아, 이미지 반복문으로 보여지게하는것. #예시 이렇게 img폴더안에 1.jpg 2.jpg 3.jpg가 있다. 만약 여기서 4.jpg를 담으면 템플릿에서는 사진 네개를 띄워주는거다. 반대로 3.jpg를 삭제하면 사진 두개를 띄워주게 될거다. # 시작하면서 사실 단순해 보이는 로직이다. 하지만 정말~~~ 애를먹었다. 이유는 모르겠다.. 걍 안됐다.. 구글링해서 비슷한 문제를 겪은 외국인들 stack overflow에도 봤지만 아주 댓글이 산더미같이 쌓였다.. 얘네들도 안되서 그랬겠지..

javaScript/vueJs 2023.03.10

require.context / 파일경로 가져오기.

이미지파일을 디렉토리별로 분류해서 관리한다. js파일에서 특정디렉토리에 어떤 파일들이 있는지 동적으로 알고싶은데 node처럼 path모듈을 사용할수도 없고..해서 찾아봤더니 require.context가 있더라 const context = require.context("../assets/img", false, /\.png$/); for (const key of context.keys()) { console.log(key); } 참고로 assets/img폴더안에 있는 이미지들을 가져올거다. require.context메서드 파라미터는 각각 첫번째 : 찾을 경로 두번째 : 불린값인데 하위 폴더까지 다가져올거냐 마냐임. 세번째 : 원하는 파일명 정규식 결과를 보면 ./1.png ./2.png ./3.png 이..

javaScript/nodeJs 2023.03.08

시작하면서/ 자바스크립트 소개

렌더링 : HTML, CSS, Jave Script로 작성된 문서를 해석해서 브라우저에 시각적으로 출력하는것. 서버사이드렌더링 : 서버에서 데이터를 HTML로 변환해서 브라우저에 전달하는 과정 SSR (server side rendering) Node js : 자바스크립트 런타임 환경 비동기 I/O(입출력) 단일스레드 이벤트루프 기반 동작 SPA에 적합(single page Application) *CPU사용량이 높은 어플리케이션에는 권장하지 않음. ECMA Script 이크마스크립트 : ECMA-262, 자바스크립트의 표준사양 클라이언트 사이드 Web API # 자바스크립트는 개발자가 별도의 컴파일작업을 수행하지 않는 인터프리터언어. 컴파일러 언어 : - 코드가 실행되기전단계(컴파일) 타임에 소스코드 ..