JavaScript에서 호이스팅(hoisting)이란, 인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것을 의미합니다. var로 선언한 변수의 경우 호이스팅 시 undefined로 변수를 초기화합니다. 반면 let과 const로 선언한 변수의 경우 호이스팅 시 변수를 초기화하지 않습니다.
-MDN-
뭐라고요..?
MDN 공식문서는 늘 그렇듯 쉬운걸 어렵게 설명한다. 저 내용을 알려면
JavaScript에서 호이스팅(hoisting)이란, 인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것을 의미합니다. var로 선언한 변수의 경우 호이스팅 시 undefined로 변수를 초기화합니다. 반면 let과 const로 선언한 변수의 경우 호이스팅 시 변수를 초기화하지 않습니다.
이만큼을 알아야한다. 사실 난 알고 있으니 웹개발 안접는다
이해되면 뒤로가기 다른글 봐라
인터프리터
변수
함수
메모리공간
선언
할당
var
선언한변수
undefind
변수 초기화
let
const
호이스팅을 이해하기위한 공식문서에서는 12가지의 키워드가있고 각각 또 검색을해보면
마치 러시안 인형 처럼 까도까도 계속 나와 개발 접을꺼다
끌어올린다 Hoisting의 전부
호이스트란 천장에 달아두고 물건 들어 올려주는게 호이스트다.
자바스크립트 프로그래밍은 "순차적구조"를 가지고있다 그냥 내가 쓴 소스코드가 위에서 아래로 작동 되는걸 의미한다
즉, 이 말은 아래에서 위로는 작동 될 일 없다는 걸 뜻한다.
너무나 중요해서 눈물이 날지경이다 🤭🤭🤭 "순차적구조" 소스코드는 위에서 아래로 실행된다. 특히나 인터프리터언어인 자바스크립트에서는 더욱이나 중요한 구조이다. 객체니 선언이니 이딴게 중요한게아니다. 정말로 리터럴리 순차적으로실행된다는것을 머리속에 박고 시작해야한다.
순차적으로 실행시킬 변수만 있어도 프로그래밍은 된다.
조건,반복,클래스,객체,캡슐,모듈,추상화,알고리즘,자료구조,운영체제,에러처리 다~ 그 다음 이야기이다
TMI
메모리공간
선언
할당
변수 초기화
변수는 메모리공간에 접근할때 사람이 보기 편하게 정한 이름 이고
메모리주소 :0x4d966B0e3177b8318D3DD2B9C1696B032e3177be88318D3D9C16 이런값을 우리가 알아볼리가없다
변수를 선언 한다는 것은 메모리공간을 사용 한다고 컴퓨터에게 "선언" 하는것이다 프로그래밍언어는 컴퓨터에게 이야기하는것이니 선언은 컴퓨터한테 해주는거다 변수는 사실 값이 고정된것이아니라 숫자가 들어올수도 문자가들어올수도 객체가들어올수도 다른메모리주소를 참조할수도 여러가지로 사용이가능하기때문에 반드시 크기를 정해주어야한다.
(킹갓제네럴 자바스크립트는 지가 알아서 정한다)
할당은 메모리주소에 값을 넣는것을 할당이라고한다
변수 초기화는 맨처음하는 할당이다.
선언된 변수는 메모리공간만 있다. 그리고 그 공간은 사람입장에서는 빈공간을 떠올리기가 쉽다.
하지만 컴퓨터에게는 "빈공간"이라는거조차 설정해주어야 한다. 0과1밖에모르는 똥멍청이에게 "빈공간"이라는걸 설명해주어야한다.
이걸 초기화라고한다 처음 할당받을값을 지정해주는것이다
변수 = 111 #변수는 숫자야
변수 = "글자" #변수는 글자야
변수 = 객체 #변수는 객체야
변수 = 메모리주소 #변수는 메모지주소야
변수 = Null #암것두없어...
C언어에서는 정수(integer) 라는 데이터타입은 4바이트 이다
변수를 정할때에는 기본적으로 데이터타입과 얼마 만큼 메모리를 쓸지 컴퓨터에게 알려줘야한다 그냥
변수 = 10 ; 이렇게 해버리면 컴퓨터입장에서는 이딴거 못알아듣는다 메모리공간은 물리적이기때문에 메모리를 사용할크기를 지정을 해주어야하며 컴퓨터는 기본적으로 이진법 즉 0,1만 사용하기때문에 십진법10을 절때 이해못한다 심지어 0,1도 추상화된것이다 그냥 전기가 들어오고 안들어오고이다.
(킹갓제네럴 자바스크립트는 다~알아듣는다)
아래가 선언이다. 지금 저 코드는 메모리에 할당받을 4바이트의 메모리공간을 알려준거다
int num; //int라는 데이터 타입의 크기 만큼 메모리를 쓴다고 컴퓨터한테 알려준것이다.
아래가 초기화이다 4바이트의 메모리공간안에 숫자10 (십진 정수) 을 넣었다
num = 10;
선언과 할당을 동시에 할수도있다.
int num = 10;
보통우리가 선언과 초기화,할당을 모두 동시에해버린다.
자 하방방이 한글로된 프로그래밍언어를 만들었고 문법은 한글로 적고싶으대로 쓰면 된다.
1. 화면.출력() 에서 이름을 "참조"했다. 근데 이름이없다?
-이딴 코드에서 절때로 화면에 출력이 되면 안된다무조건 오류가 발생 해야 하는 것이 당연한 이치다. 여기서말하는 오류는 치명적인 오류며 프로그램이 중단되는것을 뜻한다. 컴퓨터 입장에서는 더 이상 실행시킬것이없으니 중단되는것이 당연하다.
화면.출력(이름) //첫번째 줄이쥬?
변수 이름 = "하방방" //두번째 줄이쥬?
2.자바스크립트는 "인터프리터" 언어이기 때문에 1줄씩 실행된다
- 1번에 부가설명이다 인터프리터 언어이기때문에 반드시 1줄씩실행되며 밑에문장은 폰노이만한테 보여줘도 이름이 뭐가 출력 될지 모른다.
화면.출력(이름) //첫번째줄 이것만 실행 되겠쥬? 폰노이만 할아버지가 와도 이름이 뭔지 모르겟쥬?
3. 하지만 자바스크립트는 저게 실행된다.
화면.출력(이름)
>> undefind 인데요? //자바스크립트엔진은 사실 폰노이만 할아버지임
변수 이름 ="하방방" // 밑에 이렇게 정의가 되어있었거든요
(킹갓제네럴 자바스크립트는 모든 것을 알고 계신다.)
호이스팅이란 모든 var로 선언된 변수들을 미리 읽어 최상단에 위치시켜두고 Undefind로 초기화 해두는것.
초기화가 되어 있으면 오류가 없이 진행이되니까! (이래서 자바스크립트가 디버깅하기 빡세다고하는거군요)
JavaScript에서 호이스팅(hoisting)이란,인터프리터가변수와함수의메모리 공간을선언전에 미리할당하는 것을 의미합니다. var로선언한 변수의 경우 호이스팅 시 undefined로변수를 초기화합니다. 반면 let과 const로 선언한 변수의 경우 호이스팅 시변수를 초기화하지 않습니다.
// value
console.log(10);
console.log('Owen');
// variable
let firstName = 'Thomas';
console.log(firstName);
firstName = 'Alex';
console.log(firstName);
// camelCase
let myAge = 10; // Good
let MyAge = 12; // Bad
let $myAge = 15; // Bad
let 1myAge = 20; // Bad
// snake_case
let my_age = 25; // Good
자바스크립트의 데이터타입중 원시타입의 대한설명이다
테이터타입은 7가지이다.
// data type
// Primitive
// 1. Number
console.log(10);
let number = 12;
console.log(number);
console.log(typeof number);
// 2. String
console.log("Kevin");
let name = "Kevin";
console.log(name);
console.log(typeof name);
let myName = 'Kim';
let templateLiteral = `hello ${myName}`;
console.log(templateLiteral); // hello Kim
// 3. Boolean
console.log(true);
let isFun = true;
console.log(isFun);
console.log(typeof isFun);
// 4. Undefined
let apple;
console.log(apple);
console.log(typeof apple);
// 5. Null
let time = null;
console.log(time);
console.log(typeof time);
// 6. Symbol
let symbol = Symbol();
console.log(symbol);
console.log(typeof symbol);
// 7. BigInt
let theBiggestInt = 9007199254740991n;
console.log(theBiggestInt);
console.log(typeof theBiggestInt);
getElementById()와 querySelector()는 모두 JavaScript에서 DOM(Document Object Model)을 조작하기 위해 사용되는 메서드입니다. 그러나 두 가지 메서드 간에는 몇 가지 중요한 차이점이 있습니다.
선택 방법: getElementById(id): getElementById()는 HTML 문서 내에서 특정 id 속성 값을 가진 요소를 선택합니다. 이 메서드는 문서 내에서 해당 id 값과 정확히 일치하는 요소를 반환합니다. id는 문서 전체에서 고유해야 합니다. querySelector(selector): querySelector()는 CSS 선택자를 사용하여 요소를 선택합니다. CSS 선택자를 사용하므로 id 외에도 클래스, 요소 이름, 속성 등 다양한 방식으로 요소를 선택할 수 있습니다. 반환 값: getElementById(id): getElementById()는 일치하는 id를 가진 요소 중 첫 번째 요소를 반환합니다. 따라서 반환 값은 단일 요소입니다. querySelector(selector): querySelector()는 일치하는 요소 중 첫 번째 요소를 반환합니다. 따라서 반환 값은 단일 요소입니다. 브라우저 호환성: getElementById(id): getElementById()는 모든 최신 브라우저에서 지원되는 표준 DOM 메서드입니다. querySelector(selector): querySelector()는 대부분의 최신 브라우저에서 지원되지만, 오래된 브라우저에서는 지원되지 않을 수 있습니다. 또한, querySelector()는 복잡한 선택자와 일치하는 요소를 찾는 데에는 querySelectorAll()에 비해 성능이 약간 떨어질 수 있습니다. 따라서, 간단한 id 값으로 요소를 선택하고자 할 때는 getElementById()를 사용하는 것이 효율적입니다. 하지만 복잡한 선택자 또는 다양한 속성에 기반한 요소를 선택해야 할 때는 querySelector()를 사용하는 것이 유용합니다.