let ES6(ECMA Script 6)에 새롭게 추가된 블록 레벨 스코프 변수 선언 방법입니다. 1. 문법 let var1 [= value1] [, var2 [= value2]] [, ..., varN [= valueN]]; var1, var2, ..., varN변수 이름 value1, value2, ..., valueN변수의 초기 값 2. var과 let의 스코프 비교var은 함수 레벨 스코프를, let은 블록 레벨 스코프를 가집니다. ([자바스크립트] 유효범위(Scope)와 호이스팅(Hoisting) 참고) var function varTest() { if (true) { var x = 2; console.log(x); //2 } console.log(x); //2 } varTest(); if문 안..
Promise Promise 패턴은 ES6(ECMA Script 6)에 정식으로 포함되었습니다.비동기프로래밍을 할 때, 콜백이 중첩되는 경우를 흔히 볼 수 있습니다. 중첩된 콜백은 화면 오른쪽을 뚫고 나갈 듯이 확장이 되고, callback1(1, function () { callback2(2, function () { callback3(3, function () { callback4(4, function () { callback5(5, function() { console.log("콜백지옥...!"); }); }); }); }); }); 이러한 형태의 콜백지옥이 탄생하게 됩니다. Promise를 사용하여 콜백 지옥을 해결할 수 있습니다. Promise를 console.dir로 찍어본 결과는 밑에 그림과..
콜백함수(Callback function) 자바스크립트에서 함수는 객체(object) 입니다. MDS(Mozilla Developer Site)에서는 밑에와 같이 설명하고 있습니다. In JavaScript, functions are first-class objects, because they can have properties and methods just like any other object.What distinguishes them from other objects is that functions can be called. In brief, they are Function objects. 자바스크립트에서 함수는 프로퍼티와 메소드를 가질 수 있기 때문에 1급객체 입니다. 다른 객체와 구별되는 점은 ..
함수(Function)1. 함수 선언(Function declaration 혹은 Function statement)함수 선언(Function declaration)을 MDS에서 밑에와 같이 정의 하였습니다. 문법 function name([param,[, param,[..., param]]]) { [statements] } nameThe function name. paramThe name of an argument to be passed to the function. Maximum number of arguments varies in different engines. statementsThe statements which comprise the body of the function. 함수 선언 호이스팅(..
클러저(Closure) 1. 클로저(Closure)란? MDN(https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Closures) 에서는 아래와 같이 정의하고 있습니다. 클로저는 독립적인 (자유) 변수를 가르키는 함수이다. 또는, 클로저 안에 정의된 함수는 만들어진 환경을 '기억한다' 위의 말로는 이야기 되지 않습니다. 그래서 영문도 살펴 보았습니다. Closures are functions that refer to independent (free) variables (variables that are used locally, but defined in an enclosing scope).In other words, these functions 'r..
유효범위(Scope) 변수나 함수는 이름을 부여하여 의미를 갖게 됩니다. 만약 이름이 없다면, 변수나 함수는 그저 하나의 메모리 주소에 지나지 않습니다. 그래서 "이름:값"의 대응표를 만들어 사용합니다. 이 대응표의 이름을 가지고 값을 저장하고 가져와 사용합니다. 이 대응표의 충돌을 막기 위해 유효범위(Scope)라는 규칙을 만들어 사용하게 됩니다. 자바스크립트 또한 스코프 규칙을 가지고 있는데, 자바스크립트(ES6)는 함수 레벨, 블록 레벨의 렉시컬 스코프 규칙을 따릅니다. 1. 함수 레벨 스코프 (Function Level Scope)자바스크립트에서 var 키워드로 선언된 변수나, 함수 선언식으로 만들어진 함수는 함수 레벨 스코프를 갖습니다. 즉 함수 내부 전체에서 유효한 값을 가지게 됩니다. fun..
this 1. this 란?this는 일반적으로 메소드를 호출한 객체가 저장되어 있는 속성입니다. function MyClass () { this.property1 = "value1"; } MyClass.prototype.method1 = function() { console.log(this.property1); } var my1 = new MyClass(); my1.method1(); - 코드 1 - 메소드를 호출한 객체는 my1이 되며 method1은 메소드가 됩니다. method1()이 실행되면 메소드 내부에는 자바스크립트 엔진에 의해 this 속성이 생기게 됩니다. 바로 이 this에는 mthod1을 호출한 my1 객체가 저장됩니다. 결론을 먼저 말씀 드리자면, this가 만들어지는 경우,1. 일..
오버라이드 (Override) 1. 메서드 오버라이드란?메서드 오버라이드(override)는 자식 클래스에서 부모 클래스의 기능(method)를 재정의할 때 사용하는 기능입니다. 오버라이드는 두가지 경우에 주로 사용합니다.경우 1: 부모 클래스의 기능을 사용하지 않고 자식 클래스에서 구현한 기능을 사용하고 싶은 경우경우 2: 부모 클래스의 기능을 자식 클래스에서 확장하고 싶은 경우 2. 부모 클래스의 기능을 자식 클래스에서 재정의 MyParent.prototype.부모메서드 = function() {} MyChild.prototype.부모메서드 = function() {} - 코드 1-1 - 부모 클래스의 기능을 자식 클래스에서 재정의 하고 싶다면 코드 1-1처럼 부모 클래스의 재정의 하고자 하는 기능과..
클래스(Class) 자바스크립트는 자바와 달리 class가 존재하지 않습니다(ES6에서는 존재). 하지만, prototype을 사용하여 class를 구현할 수 있습니다.([자바스크립트] 프로토타입(Prototype) 참고) function Animal () { this.name = "없어요" } Animal.prototype.getName = function () { console.log(this.name); } - 코드 1 - 코드 1은 class를 prototype으로 구현한 기본 형태 입니다. 상속(Inheritance) 위에서 말씀 드렸던것과 같이 자바스크립트는 상속 또한 존재하지 않습니다. 하지만, 역시 마찬가지로 prototype을 사용하여 상속을 구현할 수 있습니다.([자바스크립트] 프로토타..
프로토타입(Prototype) 자바스크립트에서 프로토타입은 두가지의 의미를 혼용해서 사용하고 있습니다. 프로토타입의 두가지 의미 1. __proto__ : 상위에서 물려 받은 객체의 프로토타입에 대한 정보 (prototype link) 2. prototype : 자신의 프로토타입 객체 다시 말하면, 하위로 물려줄 프로토타입의 정보 (prototype object) function Animal() {}; console.dir(Animal); - 코드 1 - 정의한 Animal 함수의 __proto__는 Animal 객체를 생성할 때 사용될 원형 프로토타입을 가르키고 있습니다. (두가지 의미중 첫번째, prototype link) Animal 함수의 prototype은 Animal의 프로토타입을 가르키고 있..