-
01. 자바스크립트의 좋은 점들읽은 책/자바스크립트 핵심가이드 2014. 4. 19. 13:01
< 더글라스 크락포드의 자바스크립트 핵심가이드 >
01. 자바스크립트의 좋은 점들
자바스크립트에는 나쁜점도 있다. 하지만 좋은 점이 훨씬 많아서 나쁜점들에 대해 신경을 쓰지 않게 한다.
자바스크립트 = 동적언어.
동적언어란?
컴파일 과정을 거치지 않는 언어로써 프로그램이 실행 중에 다른 코드의 일부(객체나 소스코드나 뭔가 확장할 수 있는 부분)를 동적으로 로딩 혹은 include 할 수 있는 언어
자바스크립트가 만들어지게 된 좋은 아이디어 : 함수, 느슨한 타입체크, 동적 객체, 표현적인 객체 리터럴 표기법
& 일급객체
일급객체란?언어상에 제약이 없는 객체를 말한다. 즉 변수에 대입되거나 인수로 넘길 수도 있고, 반환값으로 사용하거나 연산 등에 사용하는데 전혀 제약이 없는 객체. 참조: http://en.wikipedia.org/wiki/First-class_object
나쁜 아이디어 : 프로그래밍 모델이 전역변수에 기초하고 있다는 것.
느슨한 타입체크의 장점
1. "강력한 type체크가 오류를 알려주지만, 우려하는 오류를 알려주진 않는다."
2. 클래스 구성할 필요 X
3. 타입 캐스팅과 씨름할 필요 X
객체 리터럴 표기법 장점 - 객체 리터럴에 대해선 3장에서 나옵니다.
1. 단순히 필요한 요소들을 열거하는 방법으로 객체 생성
리터럴이란?모든 데이터 타입에 들어가는 데이터값 그 자체.
Function Literal이란?
자바스크립트는 함수를 정의하는 "함수 리터럴" 문법도 제공한다.
var literal = function(x) { return x; }
이름 없는 함수(익명함수)를 프로그램 내에 리터럴 형태로 포함시킬 수 있게 한 최초의 언어인 "Lisp" 프로그램 언어를 기리는 의미에서, 이러한 방식으로 정의된 함수를 람다함수(lambda function)라고 부른다.함수 리터널을 구현하는 또다른 방식.
var literal = new Function("x", "return x;");Object Literal이란?
자바스크립트는 객체를 생성하고 프로퍼티를 지정하는 객체 리터럴 문법을 제공한다.1. 블록안에 객체 Property를 콜론(:)으로 구별한 (key: value)형태의 값을 정의하고 각각의 Property를 쉼표(,)로 분리한다.
var obj =
{
x: 2.3
, y: -1.2
};2. 객체 리터널을 아래와 같이 자바스크립트만의 표현식을 사용할 수 도 있고 중첩된 객체
활용도 가능하다.var obj =
[
{x: {x: 2.3, y:-1.2}, y: {x: 2.3, y:-1.2}}
, {x: {x: 2.3, y:-1.2}, y: {x: 2.3, y:-1.2}}
, {x: {x: 2.3, y:-1.2}, y: {x: 2.3, y:-1.2}}
];
3. 또한 아래와 같은 2가지 형태의 리터널 정의도 가능하다.
var obj = new Object()
obj.name = 'test';
var fnObj = new function(){ this.name = 'test'; return this };※ 리터럴로 객체 생성과 객체 생성자 방식의 차이
var stooge = { "first-name" : "Jerome"} 로 {} 아무것도 없거나 하나이상의 이름/값 쌍들을 둘러싸는 중괄호 / 중첩된 객체로도 사용가능
var oEmpty = new Object()
프로토타입에 의한 상속
특정 객체에 있는 속성들을 다른 객체에 직접 상속
나쁜점 : 전역변수.
자바스크립트에서 함수 밖에서 선언하면 전역변수가 되고, 함수 내에서 선언하면 지역변수가 된다. 하지만 함수 내에서 선언했다고 하더라도 var를 사용하지 않고 test = "local" 이라고 선언하면 전역변수가 되어 생각하지 않은 값을 낼 수 있고, 이렇게 같은 이름의 변수가 생기면 변수의 어느부분에서 오류가 났는지 찾기가 어렵다.
※ 이 책에서 말하는 자바스크립트 사용이유
1. 선택의 여지가 없다.
2. 꽤 괜찮다. ( 경량화되있다. 표현적(expressive)이다. functional programming 이다.)
자바스크립트를 정의하는 표준 : The ECMAScript Programming Language third Edition / http://www.ecmainternational.org/publications/files/ecma-st/ECMA-262.pdf