function scopeTest () {
var a = 10;
if (true) {
let b = 20;
const c = 30;
}
// let 하고 const는 블록스코프를 갖기 때문에
// 외부에서 접근하면 b와 c에는 접근할 수 없다.
console.log(a); // 출력 : 10
console.log(b); // 출력 ?
console.log(c); // 출력 ?
}
scopeTest();
변수를 사용할 때는 const
를 사용하고
재할당이 필요할 때는 let
을 사용하자
var myVar;
console.log(myVar);
var myVar = 10;
var
는 어차피 쓰지 않으니 중요하지 않지만
이렇게 사용했을 때도 undefined
가 출력된다.
그냥 우리가 typeof
를 이용해 데이터의 타입을 확인할 수 있다.
거의 typeof
를 써서 무언갈 만들일은 없기 때문에
이 정도 쓸 수만 있다고 사용하기
참조 타입
객체 , 배열이 같다라고 표현했을 때
false
가 나온다면 그 데이터주소가 다르기 때문에 같지 않은 것이다.
오브젝트를 만들고 싶은데 같은 객체로 만들고 싶지 않을 때 사용법
let obj1 = {name:"John"};
let obj2 = {name:obj1.name};
obj1 === obj2 => false
obj1 = {...obj2}
obj1 === obj2 와도 같다
그렇다면 배열을 어떻게?
let arr1 = [1,2,3];
let arr2 = [...arr1];
==
타입 추론을 자기마음대로 해서 비교를 한다.
그래서 10 == '10'
을 해도 true
가 나온다.
===
비교를 할 때 각각 변수의 타입까지 신경쓴다.
let x = 10;
x += 5; // x = x + 5 -> 15
x -= 3; // x = x - 3 -> 12
x *= 2; // x = x * 2 -> 24
x /= 6; // x = x / 6 -> 4
console.log(x);
이런식으로 +=
는 풀어서 사용하면 우측과 같다
이는 읽을 줄만 알면 된다.
let count = 0;
console.log(count++);
console.log(count++);
console.log(count--);
console.log(++count);
console.log(--count);
console.log(count);
전위 후위라고 count 앞에 ++
와 뒤에 ++
는 차이가 있는데
뒤에 ++ --
가 붙으면 후위라 나중에 더하기가 된다.
console.log(true && false); // false
console.log(true || false); // true
console.log(!false); // true
console.log(5 > 3 && 10 < 20); // true
console.log(5 > 3 || 10 > 20); // true
||
는 둘 중 하나만 true
면 true
&&
는 왼쪽과 오른쪽이 맞지 않으면 false
let num = 10;
let result = (num % 2) ? "짝수" : "홀수";
console.log(result);
?
전이 조건인것 후가 true
면 : false
면;
=== 의 반대는 !==
console.log("5" + 3);
console.log('5' - 3);
console.log(true + 1);
console.log(false + 1);
console.log('5' * '2');
문자열과 숫자는 더해도 JS
는 멋대로 더한다
그러니 숫자는 숫자끼리 문자열은 문자열끼리 합치는 작업을 해줘야 함.
두수의 합 함수 - 함수 선언식
function add (a,b) {
return a+b;
};
console.log(add(3,5));
두수의 차 함수 - 함수 표현식
const subtractFunction = function subtract (a,b) {
return a+b;
};
두수의 곱 함수 - 화살표 함수
const multiply = (number1, number2) => {
return number1 * number2;
}
화살표 함수 1줄에 return
한줄이 있을 때 아래처럼 줄일 수 있다.
근데 원래 의도했던 함수를 return
안하려고 했다면 아래처럼쓰면 결과가 달라질 수 있다.
(꼭 return 하는 경우에만 1줄 표현으로 줄일 때 아래처럼 표현하기)
const multiply = (number1, number2) => number1 * number2;
세 가지의 함수 모두 사용해도 상관없고 표현식은 잘 안쓰고 일반식과
화살표 함수를 2가지 번갈아가며 사용하고,
그러나 모두 함수라는걸 인지할 수 있게 읽을 수 있어야 한다.
아래는 즉시실행 함수다.
(function add(number1, number1) {
return number1 + number2;
})(5, 8)
저 아래 5,8이 매개변수를 넣어주는 자리고
얘는 켜지자마자 바로 실행되는 즉시실행 함수다.
기본 매개변수를 설정하는 함수
function nameWrite(name = '이강민') {
console.log(`안녕 난 ${name} 이야`);
}
nameWrite();
매개변수name
에 기본값을 설정한 형태
그래서 값이 없을 때 기본값이 console
에 출력된다.
function add(number1, number2 = 0){
console.log(number1 + number2);
}
add(5,10);
add(8);
add(8)
처럼 추가했을 경우
기본 매개변수는 오른쪽 맨 끝에서부터 채워줘야 한다 그래서
number2 = 0
을 먼저 설정해주었다.
그러나 기본 매개변수를 설정하는게 프로그래밍에 좋은 구조는 아니다.
왜냐면 내가
function add(number1, number2 = 0, name){
console.log(number1 + number2);
}
이라는 완전 다른형태의 매개변수를 추가 했을 때
name을 맨 앞에 옮기면 또 값을 줄 때
name값을 또 앞에 추가해야되기 때문에 복잡해진다.
switch
는 라는 조건문도 있지만 일반적으로 if - else if
로 조건문을 만든다.
const fruits = ['apple','banana','grape'];
0 1 2
for (let i = 0; i <= fruits.length - 1; i ++) {
console.log(fruits[i]);
}
이렇게 length -1을
써서 어디서 끝날 건지를 확인해줘야 함
배열의 첫번째 부터 끝까지 다 접근하고 싶을 때
for (let i = 20; i > 0; i--) {
console.log(i);
}
거꾸로 숫자를 세는 방법
반복문이 항상 0일 필요 없고 length일 필요 없고 숫자일 수도 있다.
i가 항상 작은 값이 아니여도 된다.