FNCW
50
2021-08-30 00:34:02
6
638

자바스크립트 var은 이제 안쓰이는 변수인가요?


let과 var의 역사에 대해 알고있는 분 계신가요?
0
  • 답변 6

  • 한량개발자
    1k
    2021-08-30 07:12:51

    let, const 는 ES6(ES2015) 에 추가된 새로운 변수명명 키워드입니다.


    차이점은

    var 는 함수레벨스코프고 let, const 는 블록레벨 스코프입니다.


    var 에는 몇가지 문제점들이 존재합니다.


    1. 암묵적인 선언


    function a() {
      name = 'okky';
    }
    


    위와 같이 함수내부에서 var 키워드를 생략하고 변수를 사용하면 암묵적으로 전역에 선언하는거와 같은 동작을 합니다. 만약에 전역에 name 이라는 변수가 이미 존재한다면..?


    2. 중복선언

    선언 이라는것은 기존에 없던걸 생성하는건데, var 는 이러한 가독성을 헤칩니다.

    var a = 1;

    var b = 2; // b = 2; 랑 같은데 이렇게 중복선언 가능



    function b() {
      if(true) {
        var bbq = 'bbq';
      }
      console.log(bbq); // bbq
    }

    위와같은 경우도 if 블록이 끝났는데 함수레벨스코프라는 특성으로 인해 변수 생애주기가 끝나지 않은것이 확인이 가능합니다.


    --------------


    위와 같은점을 보완하고자 ES6 에서 새롭게 등장을 했구요.

    let, const 는 한번 검색해보시면 금방 이해하실겁니다.


    감사합니다.

  • HJOW
    4k
    2021-08-30 09:16:36

    IE 지원해야 하는 프로젝트에서는 반드시 쓰입니다.

  • yeori
    3k
    2021-08-30 13:22:02

    자바스크립트가 급하게 만들어진 언어입니다.

    아주아주 초창기 브라우저에 들어간 기능 중 하나였는데 일정상 기간내에 만들면 들어가고 못만들면 빠지는 스펙이었습니다.

    그래서 빨리빨리 급하게 얼른 만들어서 들어갔는데, 이렇다보니 당대의 다른 언어들과 비교해도 납득이 가지 않는 이상한 문법들이(버그 비스무리한) 존재했고 var 를 붙여서 정의한 변수의 '괴상한 작동'도 그 중 하나입니다.

    js도 java처럼 이렇게 널리 오랜 기간 사용될줄 모르고 소박하게 만들어진 언어였고, 이후 등장한 다른 브라우저들도 js의 이런 특징들을 똑같이 따라가게 됩니다(브라우저마다 동작이 다르면 안되니까).

    호이스팅이나 변수 스코핑 문제라든가 모듈 시스템의 부재로 인한 변수 덮어쓰기(빅엿을 먹임), var 를 안붙인 모든 변수는 window 내장 객체로 붙어버린다든가(다른데서 덮어써버릴 수 있음 이것도 빅엿) 등등...

    변수 관련해서 기능이나 규칙이 많이 부실했고 모든 프로그래머가 재주껏 알아서 잘 기억하고 피해서 써야했습니다(놀이터에 지뢰가 120발 묻혀있으니까 안밟게 조심하고 재밌게들 노셔)

    시간이 흘러 js로 만들어야 하는 것들이 점점 커지고 투입되는 인력도 늘고 "생산성"에서 발목 잡히는 일이 늘게되자, 언어를 이대로 놔두고서는 해결이 안되겠다는 공감대가 형성되고 최근 10년동안 문법 표준을 강화하는 일련의 작업들이 진행되어왔습니다.

    let과 const같은 새로운 키워드가 이런 배경에서 나왔고...

    물론 이런 표준화 작업과 별개로 수많은 민초들이 세상을 바꿔보고자 뛰어들어 문법 교정이나 문법변환 라이브러리, 나름 모듈 시스템을 직접 구현해서 세상에 쏟아냈고,

    그 결과로 더 난장판 춘추전국시대가 도래했습니다.

    지금의 프론트엔드를 보면, 80년도에 한쪽에서 아파트 짓는다고 땅파고 기둥 꽝꽝 박아대고,

    반대편에서는 지하철 공사장 짓는다고 바닥에 철판 덮어놓아서 차 다닐때마다 덜컹거리고,

    그 와중에 또 누구는 나무 심고 보도블럭 깔고,

    비 오면 인도에 흙탕물 질질 흐르고,

    펌프로 물 퍼낸다고 하루종일 시끄럽고,

    비 개면 먼지 풀풀 날리고 ,

    딱 이런 풍경입니다. 10년 지나도 공사가 안끝날거같은 느낌.

  • HJOW
    4k
    2021-08-30 15:39:43 작성 2021-08-31 09:05:24 수정됨

    사실 괴상하다기 보다는

    애초에 편하게 쓰라고 만들어진 언어입니다. 오늘날처럼 UI의 근간을 이루라고 만든 언어가 아닙니다.

    그당시엔 AJAX가 뭐겠습니까? 그냥 기본 반복문 if문 쓰는 정도에 alert, prompt로 메시지 출력하고 입력받고, 이걸로 폭탄태그 만드는 정도였지.


    가볍게 쓰라고 만든 언어이기 때문에 궂이 변수나 함수 선언 순서도 고려하지 않도록 hoisting이라는 개념도 도입하고, 변수 선언 시 바깥에도 영향을 미치도록 만든 겁니다.


    10년 전만 해도 자바스크립트 엄청 무시받았습니다. 대부분의 UI 출력은 jsp / php 등의 기술로 서버에서 구현해야 하는 게 당연했고, 디자인 또한 플래시, css를 썼고 서버와의 통신은 당연히 form 을 썼죠. AJAX가 막 나오던 시기가 10년 전입니다. 근데 자바스크립트는 그것보다도 10년 더 전에 나왔죠.


    시대가 흐르고 사람들이 이 자바스크립트 라는 도구를 처음 설계 의도와 다르게 화면 구성 동작에까지 사용하면서 문제가 발생한 것이죠. 개선을 하더라도 기존 코드는 동작해야 하니까요.

  • FNCW
    50
    2021-08-30 17:37:48
    다들 친절한 답변 감사드립니다!!
  • 로그인을 하시면 답변을 등록할 수 있습니다.