[JavaScript] 자료형, 스코프, 클로저함수

노호준·2023년 1월 2일
0

원시자료형, 참조자료형

  • number string boolean undefined 모두 고정저장공간차지하는 원시자료형(변수에 값이담김)
  • 배열, 객체, 함수는 참조자료형(보광함의 주소가 담김)
  • stack에 let a = 1 을 하면 stack에 저장
  • 배열은 stack에 주소를 저장하고 주소가 가리키는 heap에 저장해놓음
  • 참조자료형은 데이터크기가 동적으로 변함, 값이아닌 주소가 담김
let first = [10, 20, 30, 40];
let second = first;
second[0] = 5;
first === second // true
  • 주소값을 가져가므로 first도 같이바뀐다.
let x = 2;
let y = x;
y = 3;
x // 2
let x = { foo: 3 };
let y = x;
y = 2;
x.foo // 3

y가 x의 주소값을 할당받았으나, 다시 원시자료형을 할당받아서 x에는 영향없음

let score = 80;
function doStuff(value) {
  value = 90;
}

doStuff(score)
score //80
  • 주소값이 아닌 값자체를 복사해서 전달하므로 score에는 초기값이 유지됨.

스코프

  • scope : 변수의 유효범위
let username = 'kimcoding';
if (username) {
  let message = `Hello, ${username}!`;
  console.log(message); // ?
}

console.log(message); //
  • message 출력시 username을 바깥 스코프에서 가져왔으므로 출력됨
  • 마지막줄 message는 message가 안쪽 스코프에 선언되어 있으므로 바깥쪽에서 접근불가
  • 안쪽 스코프 변수는 바깥쪽 스코프에서 못접근함, 반대는 가능
  • 스코프는 중첩이 가능함. 함수안의함수안의함수안의...
  • Global Scope : 가장 바깥쪽 스코프
  • local scope : 나머지 안쪽
  • 스코프1. block scope : 중괄호 기준으로 범위가 구분됨, 화살표함수 포함, 블록 벗어나면 못씀
  • 스코프2. function scope : 함수스코프, 화살표함수 포함안됨
  • var 은 block scope를 무시함(권장안함)
  • const는 값을 새롭게 할당할일 없다면 권장됨. 재할당 안됨.
  • var로 선언된 전역변수,함수는 window객체에 속하게 됨
  • window : 브라우저 창을 대표하는 객체, var로 선언된 전역변수가 window객체에 속함
  • console.log(window.myName); 하면 나옴. 이게 윈도우객체다
  • 전역변수 는 최소화하는게 좋다. side effect발생
  • 선언없이 변수 할당하면 var처럼 전역변수로 취급됨
  • 안전코드모드 js 맨 첫줄에 'use strict'쓸것

클로저 함수

const ladder = function(x) {
    return function(y){
        return x + y;
    }
}
  • 클로저함수 : 함수를 리턴하는 함수
  • x, y가 선언된곳이 다름, x는 외부함수라고 부르자.
  • y가 선언된 함수는 내부함수라 부르자. 클로저 함수는 스코프가 분리되어 있음.
  • 내부함수는 외부함수에 선언된 변수에 접근이 가능함.
  • 외부함수는 내부함수에 선언된 변수에 접근이 불가능함.
  • 함수실행이 끝나도 외부함수내 변수 사용가능

0개의 댓글

Powered by GraphCDN, the GraphQL CDN