항상 ES5, ES6의 특징이나 차이에 대해서 찾아보긴했지만 ECMA 자체가 어떤 의미를 가지는지는 찾아보지 않아서

한번 정리해보았다. 

 

ES는 ECMA Script 의 약자로 Script 의 규격, 표준을 말한다.

 

버전 별 특징은 아래와 같다.

ES3 (1999)

- 가장 범용적인 버전 (흔히 말하는 javascript)

 

ES5 (2009)

- 배열에 forEach, map, filter, reduce, some, every와 같은 메소드 지원

- Object에 대한 getter / setter 지원

- 자바스크립트 strict 모드 지원 (엄격한 문법 검사)

- JSON 지원 ( 과거에는 XML 지원하다가 json 지원 포함)

 

* IE9를 포함한 모던 브라우저들은 ES5 까지는 무난히 적용가능

 

ES6 (= ES 2015)

- let, const 키워드 추가

- arrow 문법 지원

- iterator / generator 추가

- module import / export 추가

- Promise 도입 (callback hell 해결위해 도입)

 

ES8 (= ES 2017)

- async — await (callback hell 해결위해 도입)

 

이번글은 개괄적으로 ECMA를 알아보기위해 작성했기때문에 버전별 특징에 대한 상세와 브라우저 호환성 관련 포스팅은 차근차근 작성할 예정이다!

 

참고글

// ES 버전별 특징 설명

https://medium.com/sjk5766/ecma-script-es-%EC%A0%95%EB%A6%AC%EC%99%80-%EB%B2%84%EC%A0%84%EB%B3%84-%ED%8A%B9%EC%A7%95-77715f696dcb

 

// 브라우저 호환성 설명 (상세)

https://webclub.tistory.com/316

 

'Language > JavaScript' 카테고리의 다른 글

javascript - scope, lexical, hoisting  (0) 2018.07.24

Scope 란?

scope 는 범위라는 뜻으로 프로그래밍 언어에서 변수나 메소드의 참조 범위

여기에서는 javascript 에 대한 scope 개념만 설명


Scope 종류

전역(global scope) : script 내에 어느 곳에서든 참조 가능

지역(local scope) : 정의된 함수 내에서만 참조 가능. 함수 외부에서는 접근 불가


[ 사진1 ] JavaScript 의 Scope 종류



> 로컬 변수의 값을 바꾸더라도 함수 내부에서만 유효하므로 전역변수의 값은 바뀌지 않음

var x = 'global';
function ex() {
  var x = 'local';
  x = 'change';
}
ex(); // x를 바꿔본다.
alert(x); // 여전히 'global'

[ 예제1 ] 지역/전역 변수 특징



JavaScript의 Scope 특징

  • 변수명 중복 허용
  • var 키워드 생략
  • Function Scope
  • 렉시컬 특성
  • 변수 호이스팅 (variable hoisting)



변수명 중복 허용

자바스크립트에서는 변수명이 중복되어도 에러가 나지 않음

변수명이 여러 개 중복될 경우 가장 가까운 변수를 참조


var scope = 10;  
function scopeExam(){  
    var scope = 20;
    console.log("scope = " +scope);
}
scopeExam();  
//실행결과
/*
scope =20  
*/

[ 예제2 ] 변수명 중복 허용



var 키워드 생략

var 키워드를 붙이지 않으면 전역변수로 정의


> 전역 변수는 어디에서나 참조 가능하므로 변경된 값으로 출력

var x = 'global';
function ex() {
  x = 'change';
}
ex();
alert(x); // 'change'

[ 예제3 ] var 키워드 생략



Function Scope

자바스크립트는 블록단위가 아닌 함수 단위로 scope를 정의



> 다른 프로그래밍 언어는 블록 단위로 변수의 scope 가 정의

> 자바스크립트의 경우 function scope 의 특징을 가지므로 함수 내에서 a, b, c 의 scope 가 동일

function scopeTest() {  
    var a = 0;
    if (true) {
        var b = 0;
        for (var c = 0; c < 5; c++) {
            console.log("c=" + c);
         }
         console.log("c=" + c);
    }
    console.log("b=" + b);
}
scopeTest();  
//실행결과
/*
c = 0  
c = 1  
c = 2  
c = 3  
c = 4  
c = 5  
b = 0  
*/

[ 예제4 ] Function Scope 특징



렉시컬 특성

스코프는 함수 실행 시점이 아닌 정의 시점에 생성

lexical scoping, 정적 스코프라고도 불림



> f2 가 f1 안에서 실행되었지만 f2 외부에 있는 변수 a 를 호출할 수는 없음

function f1(){  
    var a= 10;
    f2();
}
function f2(){  
    return console.log("호출 실행");
}
f1();

//실행결과
/*

호출실행
*/
function f1(){  
    var a= 10;
    f2();
}
function f2(){  
    return a;
}
f1();

//실행결과
/*
Uncaught Reference Error  
: a is not defined
*/

[ 예제5 ] Lexical Scoping



변수 호이스팅 (variable hoisting)

변수의 정의가 선언과 할당으로 분리되는 것을 의미

변수가 함수 내에서 정의되었을 경우 선언이 함수의 최상단으로 이동

변수가 전역에서 정의된 경우 전역 컨텍스트의 최상단으로 이동

호이스팅은 함수 선언 방식에만 적용 가능 

(함수표현식, Function 생성 방식은 함수 변수로 인식)



> 예제6 소스는 자바스크립트 엔진에 의해 예제 7처럼 동작 (name 변수가 호이스팅)

function doSomething() {
    console.log("value : " + name);
    var name = "bbchu";
    console.log("value : " + name);
}
doSomething();

//실행결과
/*
undefined
bbchu
*/

[ 예제6 ] Variable Hoisting

function doSomething() {
    var name;
    console.log("value : " + name);
    name = "bbchu";
    console.log("value : " + name);
}
doSomething();

//실행결과
/*
undefined
bbchu
*/

[ 예제7 ] Variable Hoisting






'Language > JavaScript' 카테고리의 다른 글

ECMAScript  (0) 2019.09.24

+ Recent posts