변경 불가능한 값(immutable value)은 메모리 영역에서의 변경(수정)이 불가능하다는 뜻
재할당은 가능

var str = 'Hello';
str = 'world';		//변경 X, 재할당 O, 둘 다 메모리에 존재
var arr = [];
console.log(arr.length); // 0

var v2 = arr.push(2);    // arr.push()는 메소드 실행 후 arr의 length를 반환
console.log(arr.length); // 1

복사본을 리턴하는 문자열의 메소드 slice()와는 달리 배열(객체)의 메소드 push()는 직접 대상 배열을 변경->배열은 객체이고 객체는 immutable value가 아닌 변경 가능한 값이기 때문

Object.assign(target, ...sources) - 타킷 객체로 소스 객체의 프로퍼티를 복사
Shallow copy(deep copy 지원 X)

const obj = { a: 1 };
const copy = Object.assign({}, obj);
console.log(copy); // { a: 1 }
console.log(obj == copy); // false

Object.freeze() - 불변(immutable) 객체로 변경
deep copy가 아니기 때문에 객체 내부의 객체는 변경가능

const user = {
  name: 'Lee',
  address: {
    city: 'Seoul'
  }
};
Object.freeze(user);
user.name = 'Kim'; // 무시된다!
console.log(Object.isFrozen(user)); // true
user.address.city = 'Busan'; // 변경된다!

Immutable.js - "npm install immutable"으로 설치

const { Map } = require('immutable')
const map1 = Map({ a: 1, b: 2, c: 3 })
const map2 = map1.set('b', 50)
map1.get('b') // 2		//map1.set(‘b’, 50)의 실행에도 불구하고 map1은 불변
map2.get('b') // 50		//map1.set()은 결과를 반영한 새로운 객체를 반환

함수 선언문 - 자바스크립트 엔진이 내부적으로 기명 함수표현식으로 변환

function square(number) {
  return number * number;
}

//자바스크립트 엔진이 내부적으로 기명 함수표현식으로 변환
var square = function square(number) {
  return number * number;
};

함수 표현식

// 기명 함수 표현식(named function expression)
var foo = function multiply(a, b) {
  return a * b;
};

// 익명 함수 표현식(anonymous function expression)
var bar = function(a, b) {
  return a * b;
};

console.log(foo(10, 5)); // 50
console.log(multiply(10, 5)); // Uncaught ReferenceError: multiply is not defined

변수는 함수명이 아니라 할당된 함수를 가리키는 참조값을 저장
함수 호출시 함수명이 아니라 함수를 가리키는 변수명을 사용해야 함

=>함수선언식, 함수표현식 모두 함수 리터럴 방식을 사용

자바스크립트는 함수 호출 시 함수 정의에 따라 인수를 전달하지 않아도 에러 발생 X
인수가 전달되지 않은 매개변수는 undefined으로 초기화, 초과된 인수는 무시
함수.length = 함수 매개변수 갯수

호이스팅 - 모든 선언문이 해당 Scope의 선두로 옮겨진 것처럼 동작하는 특성(선언문이 선언되기 이전에 참조 가능)
자바스크립트는 let, const를 포함하여 모든 선언(var, let, const, function, function*, class)을 호이스팅 함

함수 호이스팅 - 함수 선언의 위치와는 상관없이 코드 내 어느 곳에서든지 호출이 가능(함수 선언문)

변수 호이스팅 - 변수 생성 및 초기화와 할당이 분리되어 진행(함수 표현식)
호이스팅된 변수는 undefined로 초기화 되고 실제값의 할당은 할당문에서 이루어짐

함수 표현식만을 사용할 것을 권고 - 함수 호이스팅이 함수 호출 전 반드시 함수를 선언하여야 한다는 규칙을 무시하기 때문

일급 객체 - 생성, 대입, 연산, 인자 또는 반환값으로서의 전달 등 프로그래밍 언어의 기본적 조작을 제한없이 사용할 수 있는 대상
ex) 함수
일급 객체 조건
1. 무명의 리터럴로 표현이 가능하다.
2. 변수나 자료 구조(객체, 배열 등)에 저장할 수 있다.
3. 함수의 매개변수에 전달할 수 있다.
4. 반환값으로 사용할 수 있다.

반환값
배열 등을 이용하여 한 번에 여러 개의 값을 리턴 가능
반환 생략 가능

콜백 함수 - 함수를 명시적으로 호출하는 방식이 아니라 특정 이벤트가 발생했을 때 시스템에 의해 호출되는 함수
ex) 이벤트 핸들러 처리

profile
Front-end Developer 💻🔜

0개의 댓글