일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- router
- 백준 32029번
- HTTP
- 더 흔한 색칠 타일 문제
- JavaScript
- Github
- branch
- 백준 28303번
- localstorage
- pm2
- MongoDB
- 게임 서버 아키텍처
- ucpc 2023 예선 i번
- Next
- ucpc 2024 예선 e번
- 지금 자면 꿈을 꾸지만
- Prisma
- insomnia
- 자바스크립트
- 백준 32028번
- MySQL
- 그리디
- map
- ucpc 2023 예선 d번
- Express.js
- html5
- string
- ccw 알고리즘
- PROJECT
- ERD
- Today
- Total
dh_0e
[JavaScript] Hoisting? Arrow function? JavaScript 기초 문법 본문
[JavaScript] Hoisting? Arrow function? JavaScript 기초 문법
dh_0e 2024. 4. 18. 21:591. var, let
const와 함께 변수를 선언할 수 있는 명령어이다. Javascript는 런타임 도중에 각 변수들의 데이터의 타입이 결정되므로 int, float, string 등의 데이터 타입별로 선언하는 명령어가 없다.
var와 let의 차이
var와 let 모두 호이스팅(6)으로 실행 전 코드 맨 위로 올라가지만 var는 undefined로 초기화하지만 let은 초기화되지 않아 변수 선언 이전 let으로 선언된 변수를 사용하려하면 참조 오류가 발생한다.
console.log(a); // "undefined"
var a = 1;
console.log(a); // "ReferenceError: Cannot access 'a' before initialization"
let a = 1;
또한 var은 블록 범위(scope)에 상관없이 재선언과 업데이트 모두 가능하므로 다음과 같은 결과값이 나온다.
var a = 1;
if (true) {
var a = 2;
}
console.log(a); // "2"
하지만 let은 같은 블록 범위(scope) 내에선 업데이트만 가능하며 재선언이 불가하므로 다음과 같은 결과가 나온다.
let a = 1;
if (true) {
let a = 2;
}
console.log(a); // "1"
2. NaN / Infinity
다른 언어에서 예외처리할 때 봤었던 친구. Not a Number의 약자로 숫자가 아닌 값을 변환하려고 할 때 나오는 형태.
예로 String 타입에 / 2 등의 숫자 계산이 들어갈 시에 NaN이라고 출력이 된다.
let a = "String" / 2;
console.log(a); // "NaN"
Javascript에선 1 / 0 의 계산도 가능한데 이렇게 값이 발산하는 경우 Infinity라는 값으로 출력된다.
let a = 1 / 0;
let b = -1 / 0;
console.log(a); // "Infinity"
console.log(b); // "-Infinity"
3. for .. in / for .. of
for .. in = 객체의 Key값을 출력하는 문법
let obj={
a : '1',
b : '2',
c : '3'
}
for(let key in obj){
console.log(key , obj[key]);
}
/*
Print:a 1
b 2
c 3
*/
배열은 index 번호가 출력됨
let obj=[10, 11, 12]
for(let index in obj){
console.log(index , obj[index]);
}
/*
Print:0 10
1 11
2 12
*/
for .. of = 배열, Map 처럼 반복 가능한 객체의 요소(value)를 하나씩 반복해줌 (Object는 반복 가능한 객체가 아님)
const arr = ['a', 'b', 'c'];
for (const value of arr) {
console.log(value);
}
/*
print:a
b
c
*/
4. Arrow function
함수를 간단하게 선언하여 바로 사용하고 싶을 때 주로 쓰는 화살표 함수는 다음과 같이 일반적인 함수 선언보다 간단하게 선언할 수 있다.
function Func(a, b) {
return a + b;
}
let arrowFunc = (a, b) => {
return a + b;
}
let arrowFunc = (a, b) => a + b; // {}, retrun 생략
함수 내부의 코드가 return 뿐일 경우 다음과 같이 대괄호와 return을 생략할 수도 있다.
매개변수가 하나라면 소괄호 () 도 생략 가능하다.
function Func() {
return 10;
}
let arrowFunc = () => {
return 10;
}
let arrowFunc = () => 10;
매개변수가 없는 경우 위와 같이 표현이 가능하다.
5. Hoisting
Javascript의 인터프리터가 실행 전 변수와 함수 선언을 맨 위로 이동시키는 Javascript의 주요 매커니즘이다.
environmentRecord(=record)의 수집 과정이며 변수 정보 수집 과정을 이해하기 쉽게 설명한 '가상 개념'
단, 매개변수 및 변수는 선언부를 호이스팅하며 함수는 선언식만 호이스팅되며 표현식은 되지 않는다.
함수 정의 3가지 방식
1. 함수 선언문
2. 함수 표현식
2-1. 익명 함수 표현식 : 변수에 할당하는 함수중 변수가 곧 함수명이 되는 것
2-2. 기명 함수 표현식 : 변수에 할당하는 함수임에도 함수에 이름을 붙이는 것
함수 선언식에선 함수가 호이스팅되면서 전역 공간에서 영향을 미치며 다른 개발자와 충돌할 수 있음
협업을 위해서 함수 표현식을 사용하여 변수 식별자가 호이스팅 되게끔 하는 습관을 들여야 함
more..
형변환시 +는 문자열을 기준으로 나머지 -,/,*는 숫자로 형변환을 한다!
let a = "1" + 1;
let b = "2" - 1;
let c = "10" * 2;
let d = "10" / 2;
console.log(a, typeof a); // 11 string
console.log(b, typeof b); // 1 number
console.log(c, typeof c); // 20 number
console.log(d, typeof d); // 5 number
==와 ===는 다르다. ==은 값만 같은지 비교하며, ===은 값과 데이터 타입이 모두 같은지를 비교해준다.
let a = 1;
let b = "1";
console.log(a == b); // true
console.log(a === b); // false
1년 반 동안 학원에서 C/C++/Java/Python의 기초 문법을 가르쳤지만 Javascript에는 처음 접하는 기초 문법들이 많았다. 난생 처음보는 문법들을 보니 새로웠고 js는 색다른 매력이 있는 것 같다고 느껴졌다. 까먹지 말자!
'내일배움캠프 > HTML,CSS,JavaScript' 카테고리의 다른 글
[JavaScript] 주요 문법 정리(1) (실행 컨텍스트, this binding, 유사 배열 객체) (0) | 2024.04.25 |
---|---|
[JavaScript] Map/Set (0) | 2024.04.24 |
[JavaScript] ES6 문법 정리 (구조분해할당, 단축 속성명, 전개 구문 ...) (0) | 2024.04.23 |
[JavaScript] How to use String(문자열), Array(배열), Object(객체) in JavaScript (0) | 2024.04.22 |
[JavaScript/HTML5] 비밀번호 기능 구현 및 현재 날짜와 시간 가져오기, input Type(HTML5) (0) | 2024.04.17 |