당연히 알아야 하는 중요한 부분이지만, 순간 어?
뭐였더라 했던 문법들 필기하여 복습하는 순간을 가져보자
복합할당연산자
산술연산을 함과 동시에 결과값을 재할당한다.
let x = 10;
x += 5; // x = x + 5; 와 동일하다.
console.log(x); //15
순서를 바꿔쓰면 딱히 아무런 기능이 없다.
let x = 10;
x =+ 5; // 그냥 x = 5;
console.log(x); // 5
당연히 덧셈 연산자는 문자열도 누적 가능하다.
덧셈을 제외한 연산자 등호는 NaN을 반환한다
let str1 = "안녕";
let str2 = "하세요";
console.log(str1 += str2); // 안녕하세요
let str3 = "Hello";
let str4 = "lo";
console.log(str3 -= str4); // NaN
논리연산자 조건부실행
and 조건부 실행
let x = 0;
x > 0 && console.log('x 는 0');
and 왼쪽 조건이 truthy 값일 경우에만 실행되는 한줄짜리 코드 전용 if문.
or 조건부 실행
let y = 0; // 0은 false
let z = y || 20;
console.log(z); / 20
or 왼쪽 조건이 falsy 값일 경우에만 실행
record, outer
var a = 1; // 전역 변수 a
var outer = function() {
var inner = function() {
console.log(a); // 첫 번째 console.log
var a = 3; // inner 함수의 지역 변수 a
};
inner(); // inner 함수 호출
console.log(a); // 두 번째 console.log
};
outer(); // outer 함수 호출
console.log(a); // 세 번째 console.log
inner 함수의 console.log 에는 undefined 가 찍한다.
inner 함수 내에서 var a = 3; 선언이 존재하므로, a는 inner 함수의 지역 변수로 존재하게 된다.
변수 호이스팅에 따라, var a는 inner 함수의 최상단으로 끌어올려진다.
하지만 초기화는 console.log(a)가 실행된 이후에 이루어지므로, 그 시점에서 a는 아직 undefined 상태이다.
따라서 console.log(a)는 undefined를 출력한다.
- record
record는 특정 시점의 변수 상태를 나타내는 개념으로 이해할 수 있다.
각 스코프의 상태를 기록하는 것으로, 전역 스코프는 { a: 1 }, outer의 스코프는 { a: 1 }, inner의 스코프는 { a: undefined }가 된다. - outer
outer는 함수가 다른 함수를 포함하는 구조를 의미한다.
예시에서 outer 함수는 inner 함수를 포함하고 있으며, inner는 자신의 스코프에서 전역 및 outer의 변수를 참조할 수 있다.
이로 인해 inner의 console.log(a);는 undefined, outer의 두 번째 console.log(a);는 1이 출력된다.