[ydkjsy]Get Started-1-What Is JavaScript?

js 스터디

What's With That Name?

Java 프로그래머들의 관심을 끌 목적으로 당시 유행했던 "Script"라는 단어를 붙여 JavaScript라는 이름이 나오게 된건데 사실 Java 회사인 오라클에서 이미 이 상표를 소유하고 있어서 "JS" 혹은 "ECMAScript" 혹은 여기에 개정 연도를 붙여 "ES2019"으로 부르기로 함.

Language Specification

TC39: JS 관리하는 기술 운영위원회로 공식 스펙 관리.
ECMA: 표준 조직으로 TC39의 투표 결과를 이곳으로 제출하여 공식화.

TC39는 5단계(0~4)를 거쳐 스펙을 정하게 되는데 TC39의 멤버의 생각이거나 멤버가 옹호해야만 0단계로 들어갈 수 있다. 마지막 4단계까지 통과하게 되면 내년도 개정에 포함될 자격이 된 것.

JS의 공식 표준은 TC39, ECMAd에 의한 표준 하나 외엔 없다.

The Web Rules Everything About(JS)

JS의 절대 빼놓을 수 있는 환경은 웹이다. 스펙에 정의된 JS와 브라우저 기반 JS 엔진에서 작동하는 JS는 같지만 약간의 차이점이 있다.
새 스펙이 예전 프로그램을 손상시킬 수 있는 경우, 엔진은 받아들이지 않을 수 있기 때문에 이를 가능하게 하기 위한 수정을 들어가기도 함. 혹은 스펙을 정한 뒤, 웹에서만 쓸 수 있는 예외를 만든다.

Not All (Web) JS...

JS 환경들은 특정 기능들이 있는 API들을 프로그램의 전역 범위에 추가한다.(alert.즉,JS스펙이 아님.)
web API에는 fetch(..), getCurrentLocation(..), getUserMedia(..). 노드JS에서는 내장된 모듈에서 수백의 API method들에 접근 가능하다.(fs.write(..))
신기한 것은 console.*도.

It's Not Always JS

도구는 도구다.

Many Faces

JS는 다중 패러다임.

Backwards & Forwards

backwards Compatibility(하위 호환) 언어에 변화가 있어도 기존 코드는 유효하다. 간혹 더 많은 사용자들이나 사이트들이 사용가능한 것에 비해 프로그램이 적게 깨지면 투표로 통해 바꾸기도 하지만 드문 일. JS는 여기.
forwards compatibility(상위 호환)은 새로운 기능을 넣어도 잘 돌아간다. HTML, CSS는 여기.

Jumping the Gaps

하위호환이라 옛 문법만 쓰지 말고 최신 문법을 쓰고 transpiling을 해라. 대표적으로 Babel

Filling the Gaps

상위호환 문제 중 최신 API method와 관련되어 있다면, 해당 API method에 대해 이미 기본적으로 정의된 것처럼 정의를 추가해라. 이러한 패턴을 polyfill(shim)이라고 한다.

예를들어, finally method의 부존재 때문에 에러가 발생한다면 아래와 같이 추가한다.

if (!Promise.prototype.finally) {
    Promise.prototype.finally = function f(fn){
        return this.then(
            function t(v){
                return Promise.resolve( fn() )
                    .then(function t(){
                        return v;
                    });
            },
            function c(e){
                return Promise.resolve( fn() )
                    .then(function t(){
                        throw e;
                    });
            }
        );
    };
}

예시일 뿐이지, 위와 같이 쓰지 말고, 공식적인 polyfill 모음집 ES-Shim 이런걸 쓰고, 사실 보통은 babel 같은 transpiler에서 자동으로 코드에서 필요한 polyfill을 감지하여 추가를 한다. 명시적으로 할 필요가 있을 경우 위와 같은 방법 이용.

What's in an Interpretation?

컴파일 언어는 이진 표현의 프로그램을 배포하는데 JS는 소스코드를 배포. 하지만 배포 유형은 상관이 없다. 오히려 어떻게 에러를 처리하는지가 중요.

스크립트/인터프리트 언어는 에러가 나기 전까지 실행이 잘 된다. 보통 런타임 중 에러가 난다.

반면, 파싱 언어는 문법 오류 등 유효하지 않은 명령이 있으면 parsing 중, 즉, 실행 전에 에러가 발견되어 실행되지 않는다. JS는 이에 가깝다.

JS는.

1. babel로 transpiled, webpack에 의해 packed, 매우 다른 형태로 JS엔진으로.
2. parsed to AST
3. AST to binary intermediate representation(IR), 그 후 JIT compiler.
4. JS VM이 프로그램 실행.

Strictly Speaking

strict mode는 컴파일 시 나타날 수 있는 에러를 미리 예방할 수 있다. 다른 모드 통제는 런타임중에만 확인 가능.(글로벌 객체 대신 this에 undefined?)
파일마다 모드 설정 가능하며 whitespace, comment 외에는 아무것도 쓸 수 없다.

"use strict";

함수마다도 가능하지만 파일에 설정 안했을 때 가능.

좋은 웹페이지 즐겨찾기