변수와 scope, hoisting

SunnyMoon·2020년 5월 17일
1

1) Keywords, Reserved Words

  • keword - 특정한 목적을 위해 사용하는 단어
    • var = 변수를 선언할때 사용하는 키워드
  • 예약어 (reserved keyword) : 변수명, 함수명으로 사용할 수 없는 단어
    • ex> return, for , function 등등 이미 사용된 단어
    • 사용하면 오류가 발생한다.
  • future reserved keywords : class , extends byte 등등등

2) Identifier (식별자)

  • 이름을 식별할 수 있는 형태로 작성
  • 코드내의 변수, 함수, 속성을 식별하는 문자열
  • 함수의 이름, 변수의 이름
  • 대,소문자를 구분한다
  • 유니코드문자, '$' '_' 숫자 사용가능. but 숫자로는 사용 불가
  • 예약어 사용불가 , 공백 사용 불가
  • 의미없는 이름 사용말고, 역할에 맞는 적절한 이름을 지어야 한다.

3) Comments (주석)

  • 주석
  • 설명을 프로그램에서 사용한다
  • 소스코드의 영향을 주지 않고 무시되는 부분, 소스코드를 설명할때 많이 사용된다
  • 한줄주석 : //를 사용한다
  • 여러줄 주석 : /* */ 를 사용한다

4) var, let, const (변수와 상수)

  • variable : 변하는 값
  • constant : 변하지 않는값
  • const 상수지칭이름 // 이러한 형태로 저장한다 . 선언과 동시에 값을 넣어주어야 한다
  • let 변수지칭이름 // =연산자를 이용해 값을 할당.
    • 선언과 동시에 선언 가능, 할당되지 않으면 undefined를 가진다. 선언이 안된 변수 식별자에는 값을 부여할수 없다

5) scope (변수의 유효범위)

  • 변수가 선언되고 사용되는 범위가 어느범위에서 유효한지에 대한 기준을 정해주는 규칙

  • const , let 의 유효범위 = 블록 스코프 ( block scope)

    • { } 안에서 선언되어진 변수는 , { } 안에서만 사용이 가능하다
    • { } 밖에서 사용된 변수는 { } 안에서는 사용이 가능하다.
  • var의 유효범위 = 함수 스코프

    • 기존의 사용코드 , ES6 이전의 문법
    • 블록스코프에서는 유효한 범위를 지니지 않는다. 즉 { } 의 영향을 받지 않는다
    • 하지만 함수안에서 선언된 var는 함수밖에서는 유효하지 않는다.

function(){} 함수

  • var는 함수 스코프

6) var & hoisting (변수와 호이스팅)

  • 함수를 먼저 선언하고 , 함수를 사용하는것 ⇒ 정상출력
  • 함수를 먼저 사용하고 , 함수 선언 ⇒ 정상 출력 ( 비 정상적이지만 정상적으로 작동)
  • 아래있는 선언을 끌어올린다 - 동작의 오류처럼 느껴지지만 정상적으로 사용이 가능하다
  • var선언도 또한 아래에서 선언하고 위에서 사용해도 문제 없이 작동한다

해결방안

  • let, const를 사용한다
  • 자바스크립트 맨 위에 'use strict'를 선언후에 사용한다

7) Data Types (자료형)

  • 자바스크립트 자료형 : 동적 타이핑 (dynamic type language)
  • 변수에 타입이 변경되어도 문제가 없다 ⇒ 고정타입이 없다 ⇒ 타입이 없는것은 아니다

데이터 타입

  • 기본타입 ( primitive values)

    • Boolean
    • Null
    • Undefined
    • Number
    • String
    • Symbol
  • 객체 (Objects)

  • Booelan

    • true : 참을 의미
    • false : 거짓을 의미
    • 내장객체
  • Null

    • null 은 값이 없다라는 object . 값을 가지고 있지만 값이 없다.
  • Undefined

    • 값을 할당하지 않았다. 정해지지 않았다.
  • Number

    • 숫자를 의미
    • 정수,실수도 type을 Number
    • NaN : 숫자형이지만 숫자가 아닌값을 지칭
  • String

    • ' ' 안에 입력
    • 글자의 타입
      • 만 사용가능
  • symbol

    • symbol로 선언해 값을 이용하면 각각 다른 값으로 본다

      const a = symbol('mark');
      const b = symbol('mark');
      
      consol.log(c===d); 
      //flase값 반환
profile
프론트앤드 개발을 공부하는 중입니다:)

0개의 댓글