티스토리 뷰

728x90

ECMA Script?

  • 자바스크립트는 1995년 넷스케이프 웹 브라우져에서 웹페이지에 동적인 요소를 구현하기 위해서 발명 됨.
  • 이후 많은 브라우져를 지원하면서 자바스크립트가 공통적으로 잘 작동하기 위해서 표준 규격이 필요하게됨.
  • Ecma 인터내셔널에 의해 제정된 ECMA-262 기술 규격에 의해 정의된 범용 스크립트 언어.
  • 스크립트 언어가 준수해야 하는 규칙, 세부 사항 및 지침을 제공한다.
JavaScript는 ECMAScript 사양을 준수하는 범용 스크립팅 언어이다.

ECMA Script 지원이 상이한 이유

  • JavaScript 엔진에는 Google Chrome의 V8, Mozilla Firefox의 SpiderMonkey와 같이 여러 종류가 존재함.
  • 새로운 버전의 ECMAScript를 발표한다고해서 모든 JavaScript 엔진이 갑자기 새로운 기능을 추가하지 않는다.
  • 해당 조직의 업데이트에 따라 달렸음.

ES6

  • ECMAScript2015로 알려져있는 ES6는 2009년도에 표준화된 ES5 이후로 언어 기능에 대한 첫 업데이트며 현재 많은 부라우저에서 지원한다. (하지만 cross browing 이슈 때문에 실제로 babel과 같은 트랜스 파일러를 같이 사용한다.)
  • ES5에 비해 깔끔한 문법을 사용하며 직관적이로 사용하기 편리한 문법들이 많이 나옴.

var, let, const

종류 의미
var function scope
let block scope
const block scope + immutable(배열, 오브젝트 값 변경 제외)
변수의 범위는 최대한 작게 가지고 변하지 않는 변수는 상수로 선언해야 가독성이 높아진다.
var
function varFunc() {
    if (true) {
        var innerIfVar = 'innerIfVar';
    }
    console.log('innerIfVar :: ', innerIfVar); // innerIfVar ::  innerIfVar
}

varFunc();
let
function letFunc() {
    if (true) {
        let innerIfLet = 'innerIfLet';
    }
    console.log('innerIfLet :: ', innerIfLet); // ReferenceError: innerIfLet is not defined
}

letFunc();
const
function constFunc() {
    if (true) {
        const innerIfConst = 'innerIfConst';
        innerIfConst = 'another value'; // TypeError: Assignment to constant variable.
    }
    console.log('innerIfConst :: ', innerIfConst); // ReferenceError: innerIfConst is not defined
    
}

constFunc();

화살표 함수 () => {}

  • ES5에서는 함수 선언시 function키워드를 명시해야 하지만 ES6에서는 키워드 생략 후 화살표(=>)로 정의가능.
  • 파라미터 없을시 괄호 필수.
  • 파라미터 하나만 있을시 괄호 생략 가능.
  • 파라미터가 2개 이상일시 괄호 필수.
  • 한줄 표현식 사용시 return생략 가능
ES5
var es5Func = function() {
    console.log('ES5 function !!');
};

var textPrint = function(text) {
    console.log(text);
}

var sum = function(num1, num2) {
    return num1 + num2;
}
ES6
const es6Func = () => {
    console.log('ES5 function !!');
};

// 괄호 생략 가능
const textPrint = text => {
    console.log(text);
}

const sum = (num1, num2) => {
    return sum1 + sum2;
}

// 한줄 표현식일시 괄호와 return 생략 가능
const sum2 = (num1, num2) => num1 + num2;
console.log(sum2(1, 2)); // 3
화살표 함수는 축약형이기도 하지만 this 바인딩에도 큰 차이점이 있음.
ES5
  • introduce의 경우 this(Person)에 바인딩(메서드 실행 문맥)되어 이름을 정상 출력함.
  • introduce 내부의 getMyAge의 경우 Person에 바인딩이 되지 않아(함수 실행 문맥) this가 전역(global, window)에 바인딩 되었고 전역에는 age라는 변수가 없으므로 undefined가 출력됨.
  • 이렇게 this문맥을 찾기 쉽지 않아 언어 사용자들이 혼동하게됨.
function Person(name, age) {
    this.name = name;
    this.age = age;

    this.introduce = function() {
        var getMyAge = function() {
            console.log(this.age); // 위의 age가 아닌 undefined가 출력됨.
            return this.age;
        }
        return 'my name is ' + this.name + ' my age is ' + getMyAge();
    }
}

var person = new Person('park jin', 31);
console.log(person.introduce());
  • 위의 문제를 해결하려면 this를 변수에 가지고있어야한다.
function Person(name, age) {
    this.name = name;
    this.age = age;

    this.introduce = function() {
        // this(Person)를 변수에 저장한다.
        var that = this;
        var getMyAge = function() {
            // this가 아닌 that변수로 접근한다.
            console.log(that.age); // 31
            return that.age;
        }
        return 'my name is ' + this.name + ' my age is ' + getMyAge();
    }
}

var person = new Person('park jin', 31);
console.log(person.introduce()); // my name is park jin my age is 31
ES6
  • 내부에서 this를 동일하게 바인딩 시켜 직관적으로 사용할 수 있게 변경함.
function Person(name, age) {
    this.name = name;
    this.age = age;

    this.introduce = function() {
        // 화살표형 함수 사용시 this를 직관적으로 사용할 수 있다. 
        var getMyAge = () => {
            console.log(this.age); // 31
            return this.age;
        }
        return 'my name is ' + this.name + ' my age is ' + getMyAge();
    }
}

var person = new Person('park jin', 31);
console.log(person.introduce()); // my name is park jin my age is 31

템플릿 리터럴

  • 기존 자바스크립트에서 변수와 문자열을 같이 보여주기 위해서는 문자 결합 연산자인 + 를 사용함.
  • 템플릿 리터럴은 ` (백틱) 을 사용해 문자열 및 변수를 감쌀수 있다.
ES5
function Person(name, age) {
    this.name = name;
    this.age = age;

    this.introduce = function() {
        return 'my name is "' + this.name + '" my age is ' + this.age;
    }
}

var person = new Person('park jin', 31);
console.log(person.introduce()); // my name is "park jin" my age is 31
ES6
function Person(name, age) {
    this.name = name;
    this.age = age;

    this.introduce = function() {
        return `my name is "${this.name}" my age is ${this.age}`;;
    }
}

var person = new Person('park jin', 31);
console.log(person.introduce()); // my name is "park jin" my age is 32

비구조화 할당

  • 배열과 객체에 패턴 매칭을 통한 데이터 바인딩을 제공한다.
  • 객체안의 필드를 손쉽게 꺼내어 변수로 대입할 수 있는 문법이다.
ES5
var person = {
    name: 'Park Jin',
    age: 31
};

var name = person.name;
var age = person.age;

console.log('name :: ', name); // Park Jin
console.log('age :: ', age); // 31
ES6
const person = {
    name: 'Park Jin',
    age: 31
};

const { name, age } = person;

console.log('name :: ', name); // name ::  Park Jin
console.log('age :: ', age); // age ::  31

// 다른 이름으로 할당하기
const { name: personName, age: personAge } = person;

console.log('personName :: ', personName); // personName ::  Park Jin
console.log('personAge :: ', personAge); // personAge ::  31
  • 객체를 비구조화한 후 함수의 인자로 넘길 수도 있다.
const person = {
    name: 'Park Jin',
    age: 31
};

function printPersonName({ name }) {
    console.log('name :: ', name); // name ::  Park Jin
}

printPersonName(person);

단축된 프로퍼티 초기화

//ES5
var name = 'Park Jin';
var age = 31;

var person = {
    name: name,
    age: age
}


// ES6
const name = 'Park Jin';
const age = 31;

var person = {
    name,
    age
}

간결한 메서드

//ES5
var person = {
    name: 'Park Jin',
    introduce: function() {
        return 'my name is ' + this.name;
    }
}


// ES6
const person = {
    name: 'Park Jin',
    introduce() {
        return 'my name is ' + this.name;
    }
}

 

 


출처

https://wormwlrm.github.io/2018/10/03/What-is-the-difference-between-javascript-and-ecmascript.html

 

JavaScript와 ECMAScript는 무슨 차이점이 있을까? - 재그지그의 개발 블로그

웹 개발에서 JavaScript와 ECMAScript라는 용어가 혼용되어 사용되고 있는 이유와 그 차이점에 대해 알아봅니다.

wormwlrm.github.io

https://takeuu.tistory.com/93

 

0. ECMAScript, ES6란?

ECMAScript, ES6 자바스크립트란? 자바스크립트(Javascript)는 1995년 넷스케이프(Netscape) 웹 브라우져에서 웹페이지에 동적인 요소를 구현하기 위해서 발명 되었다. 그 후 많은 다른 웹 브라우져들 또한 이 언..

takeuu.tistory.com

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

 

ECMA Script.. ES.. 정리와 버전별 특징

자바스크립트를 공부하다 보면 ECMA Script, ES5, ES6 와 같은 용어를 접하게 된다. 대~~~~충 알고 있었는데 구체적으로 알고 넘어가보자.

medium.com

https://itstory.tk/entry/JavaScript-ES6-%EB%AC%B8%EB%B2%95-%EC%A0%95%EB%A6%AC

 

[JavaScript] ES6 문법 정리

ECMAScript 6 이 문서는 https://github.com/lukehoban/es6features 를 번역한 내용입니다. 번역 문서를 읽는 중, 오타나 어색한 문장이 있으면 이슈를 등록해주세요! Introduction ECMAScript 2015로도 알려져 있..

itstory.tk

 

728x90

'개발 언어 > NodeJS' 카테고리의 다른 글

비동기 프로그래밍  (0) 2020.01.11
자바스크립트 - 프로토타입 상속  (0) 2019.12.03
자바스크립트 - 객체  (0) 2019.07.27
자바스크립트 - 매개변수  (0) 2019.07.27
자바스크립트 - 함수 유효범위  (0) 2019.07.27
댓글