[번역] 자바스크립트 프로그래밍 언어에 대한 연구 (Douglas Crockford 의 A Survey of the JavaScript Programming Language)

이 글은 Douglas Crockford 의 A Survey of the JavaScript Programming Language 를 번역한 것입니다. 잘못된 부분이나 더 좋은 번역, 의견 있으시면 댓글에 많이 적어주세요. 

 

자바스크립트 프로그래밍 언어에 대한 연구

(A Survey of the JavaScript Programming Language)

 

Douglas Crockford

www.crockford.com

© 2002 Douglas Crockford



1. 개요 


이 글은 전문적인 프로그래머들을 위한 자바스크립트 프로그래밍 언어에 대한 소개다. 자바스크립트는 작은 언어다. 그래서 다른 언어들에 친숙한 사람이라면 많이 어렵지 않을 것이다.

자바스크립트는 자바가 아니다. 자바스크립트와 자바는 전혀 다른 두개의 언어다. 자바스크립트는 자바의 한 부분이 아니다. 자바로 해석되지 않는다. (자바가 자바로 해석된다!) 자바스크립트는 자바와 같이 C 계열의 문법을 따르지만 더 깊이 살펴보면 SchemeSelf 라는 언어와 훨씬 더 비슷하다. 이 언어들도 아주 작은 언어이지만 아주 강력하고 많은 것을 할 수 있는 언어다. 이 언어들을 한번 꼭 보길 바란다. 그러면 이 언어들이 단순히 장난을 위한 언어가 아닌 많은 독특한 특징들을 가지고 있는 완벽한 프로그래밍 언어라는것을 알 수 있을 것이다.

자바스크립트는 배우는데 시간이 많이 걸리지 않는 보통의 언어다. 자바스크립트는 자바보다 클라이언트 프로그래밍과 같은 몇가지 기능에 더 잘 맞는다. 실제로 내가 직접 경험한바로는, 자바스크립트의 유용한 동적인 기술들 덕분에 자바스클립트로 작업했던 경험들이 내가 더 훌륭한 자바 프로그래머가 되는데 아주 많은 도움이 되었다.

나는 자바스크립트가 처음 소개되었을때 눈여겨볼 가치가 없는것으로 생각하여 무시했었다. 한참 후에 나는 다른 시선으로 자바스크립트를 보게 되었고 브라우져에 숨겨져 있는 굉장히 대단한 프로그래밍 언어라는 것을 발견하였다. 내가 처음에 무시했던것은 Sun 과 Nescape가 설정한 자바스크립트의 위치때문이였다. 그들은 자바스크립트가 자바의 경쟁적인 언어로서 자리매김되는것을 피하기 위하여 자바스크립트에 관련된 잘못된 말들을 하였다. 그 잘못된 말들은 초보자들을 위한 수많은 엉터리 자바스크립트 관련책들안에 그대로 전해지고 있다. 



2. 역사 


자바스크립트Nescape의 Brendan Eich이 Navigator 2를 위하여 페이지에 포함되는 스크립트 언어로서 개발되었다. 이것은 아주 훌륭한 동적인 프로그래밍 언어다. 웹브라우져와의 땔수없는 연관성때문에 갑자기 엄청난 인기를 얻게되어, 실제 사용에 맞도록 올바로 수정되거나 다듬어질 수 있는 시험기간 조차 갖지 못하였다. 그래서 강력함과 결함을 동시에 가지게 되었다.

이 글은 ECMAScript Edition 3 (즉 JavaScript 1.5)을 기준으로 설명한다. Microsoft 와 Netscape 는 언어의 결함을 수정하지 않은 정적인 수정버전들을 계속 개발하고 있다. 그 새로운 언어는 자바스크립트가 아닐 뿐더러 이 글의 범위에서도 벗어난다. 

 

 

3. 데이터 타입 (Data Types) 


자바스크립트에는 몇 개 안되는 데이터타입이 있다. 가장 기본적인 타입(primitive type)인 boolean, number 그리고 string 과 특별한 값인 null 그리고 undefined가 있다. 다른 모든타입은 객체(object) 타입에 따라 바뀐다. 

Boolean은 두가지 값을 가질 수 있습니다 : truefalse

Number는 64-bit 소수점 자리(floating point)이다, 자바의 doubleDouble 과 비슷하다. 정수형(integer type) 은 없다. 두개의 정수를 서로 나누면 소수점 자리가 나오게 된다.

또한 Number에는 특별한 값인 NaN (not a number : 숫자가 아님) 과 infinity (무한대) 값들이 있다.

String은 0개 또는 그 이상의 유니코드 문자들의 나열이다. 별도의 문자형 (character type)은 없다. 한 문자는 길이 1의 string으로 표현된다. string 간편표기법은 인용부호인 ' 또는 " 로 감싸면 된다. 두개의 인용부호중 어느것을 사용해도 괜찮지만 한 표현에서 같은것을 사용해야 한다.

 

'이것은 문자열입니다.'
"이것은 문자열입니까? 네!"
'A' // 문자 A
"" // 빈 문자열


escape는 자바와 같이 \ 문자로 한다. string은 변경되지 않는다. string은 문자열안의 문자갯수를 알수있는 length 메소드를 포함한다.  

 

var s = "Hello World!";
s.length == 12

 

간단한 형에 메소드를 추가하는것이 가능하다. 그래서 예를 들어 Math.PI.int()이 3값이 나오도록 int()라는 메소드를 모든 숫자형에 추가할 수 있다.

어떤 구현으로 날짜나 정규표현식 같은 다른 타입을 만들어낼수 있지만 이것들은 단지 객체(object)이다. 다른 모든것은 단지 객체(object)이다. 

 

3.1. 객체 (Objects) 


자바스크립트에는 해시테이블 (역주: name/value 형태의 데이터 구조)을 다루기 위한 아주 편리한 표기법이 있다.

 

var myHashtable = {};

 

이 구문은 새로운 해시테이블을 만들고 그것을 새로운 지역변수에 할당한다. 자바스크립트는 데이터타입선언에 있어 느슨한 규칙을 따르기때문에 변수 선언시 데이터타입이름을 사용하지 않는다. 해시테이블의 요소들을 추가, 대체, 가져오기위하여 배열표기법을 사용하면 된다.

 

myHashtable["name"] = "Carl Hollywood";

 

조금 더 편한 점표기법도 있다.

 

myHashtable.city = "Anytown";

 

정확한 식별자형태의 문자열 상수를 표시할 경우는 점표기법을 사용하면 된다. 언어 정의상의 에러때문에 예약어는 점표기법을 사용할 수 없지만 이 경우 배열표기법을 사용하면 된다. 

자바스크립트의 해시테이블 표기법은 자바의 객체나 배열 표기법과 아주 비슷하다는 것을 알 수 있을 것이다.  조금 더 나아가서 자바스크립트에서는 객체와 해시테이블이 동일하다. 그래서 이렇게 쓸 수도 있다.

 

var myHashtable = new Object();

 

결과는 위와 동일하다.

 

for 구문안에는 열거를 할 수 있는 기능이 내장되어 있다.

 

for (var n in myHashtable) {
    if (myHashtable.hasOwnProperty(n)) {
        document.writeln("<p>" + n + ": " + myHashtable[n] + "</p>");
    }
}

 

결과는 아래와 같을 것이다.

 

<p>name: Carl Hollywood</p>
<p>city: Anytown</p>

 

객체는 이름과 값으로 이루어진 짝들을 담고있는 참조 가능한 용기이다. 이름은 문자열 (또는 문자열로 전환되는 숫자같은 다른 요소들)이다. 값은 다른 객체를 포함하여 어떤 데이터타입도 될 수 있다. 객체는 보통 해시테이블로 구현되지만 해시함수나 다시 해싱하는 메소드같은 해시테이블 본연의 특징들은 모두 숨겨져있다. 

객체는 다른 객체안에 포함될 수 있고, 표현들은 내부 객체안으로 접근이 가능하다. 

 

this.div = document.body.children[document.body.children.length - 1]; 



객체 간편표기법에서 객체는 중괄호({})안에 콤마(,)로 분리된 이름/값의 짝들의 집합으로 표현된다. 이름은 콜론 앞에 오는 식별자 또는 문자열이다. 언어 정의상의 에러때문에 예약어는 식별자형태로 사용될 수 없지만 문자열 형태로는 사용할 수 있다. 값은 문자열이나 어느 타입의 표현들일 수 있다.
 

var myObject = {name: "Jack B. Nimble", 'goto': 'Jail', grade: 'A', level: 3};

return {
    event: event,
    op: event.type,
    to: event.srcElement,
    x: event.clientX + document.body.scrollLeft,
    y: event.clientY + document.body.scrollTop};

emptyObject = {};

 

자바스크립트의 객체 간편표기법은 JSON 데이터 교환 포맷의 기초가 된다.

할당을 통해 새로운 맴버를 객체에 언제나 추가할 수 있다.


myObject.nickname = 'Jackie the Bee'; 



배열과 함수는 객체로 구현된다.

 

3.2. 배열 (Arrays)

 

자바스크립트에서 배열 또한 해시테이블 객체이다. 이 이유로 많이 쓰이진 않지만 배열 프로그램에 아주 잘 맞는다. 배열을 만들때 사이즈를 정의할 필요가 없다. 배열은 자바와 아주 비슷하게 자동적으로 크기가 증가한다. 값은 offset이 아닌 키에 의해 저장된다. 이것이 자바스크립트 배열을 아주 사용하기 편하게 만들지만 숫자 분석을 위한 프로그램에는 적합하지 않다. 

객체와 배열의 가장 중요한 차이점은 length 속성이다. 배열에서 length 속성은 항상 가장 큰 키의 값 더하기 1이 된다. 새로운 배열을 만드는 방법은 2가지가 있다.

 

var myArray = [];
var myArray = new Array();

 

새로운 항목이 배열에 추가되고 그 키가 현재 배열의 길이(length)보다 큰 정수이면 배열의 길이는 그 키 값에 1을 더한 값으로 바뀐다. 이것은 배열의 요소들을 for 를 이용하여 나열할때 사용하기 쉽게 만드는 편리한 특징이다.

배열은 객체와 비슷한 간편표기법이 있다.

 

myList = ['oats', 'peas', 'beans', 'barley'];

emptyArray = [];

month_lengths = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

slides = [
    {url: 'slide0001.html', title: 'Looking Ahead'},
    {url: 'slide0008.html', title: 'Forecast'},
    {url: 'slide0021.html', title: 'Summary'}
];

 

새로운 항목은 할당으로 배열에 추가할 수 있다.



4. 함수 (Functions)

 

자바스크립트의 함수는 타입대신 function 키워드로 선언된다는것을 제외하면 C언어의 함수와 비슷한 모양을 가지고 있다. 함수를 호출할때 고정된 인자값을 넘길 필요가 없다. 초과된 인자값들은 무시된다. 빠진 인자값들은 undefined 값으로 전달된다. 이 특징때문에 선택적인 인자를 처리하는 함수를 작성하기가 쉬어진다. 

함수는 arguments(인자값) 배열을 사용할 수 있다. 이 배열은 호출할때 실제로 전달된 인자값 모두를 포함하고 있기때문에 가변적인 인자값 갯수를 구하는것이 쉽다. 예를 들어

 

function sum() {  // 인자값의 갯수와 상관없이 모든 인자값들의 합을 리턴한다
    var total = 0;
    for (var i = 0; i < arguments.length; ++i) {
        total += arguments[i];
    }
    return total;
}

 

자바스크립트는 자바의 내부 클래스와 같은 목적을 제공하는 내부 함수를 가지고 있다, 하지만 자바의 것보다 훨씬 가볍다. 또한 자바스크립트에는 람다표현식과 같이 작동하는 익명함수(anonymous functions) 도 있다. 함수는 어휘적 범위(lexical scoping) 규칙을 따른다. 

함수는 자바스크립트에서 첫번째 객체 등급이기때문에 함수는 객체안에 저장될수도 있고 함수에 인자로 전달될 수 도 있다. 

 

4.1. 정의 (Definition)

 

함수를 정의하는 3가지 표기법이 있다: 함수 구문, 함수 연산자, 그리고 함수 생성자

 

4.1.1. 함수 구문 (Function statement)

 

함수 구문은 현재 범위(scope) 안에서 이름을 붙인 함수를 만든다.

 

function 함수이름(인자값들) 블록

 

함수는 내부에 포함될 수 있다. 클로져(Closures)를 참고하라. 인자값들은 콤마로 구분되어 0개 또는 그 이상의 인자이름들이다. 블록(block)은 {}로 둘러싸인 0개 또는 그 이상의 구문들로 이루어진다. 

함수구문은 함수 연산자형식의 간단한 표현법이다.

 

var name = function name (인자값들) 블록 ;

 

4.1.2. 함수 연산자 (Function operator)


함수 연산자는 함수 객체를 만드는 접두어 연산자이다. 함수 구문과 비슷하다.

 

function 함수이름(인자값들) 블록

 

함수이름은 선택사항이다. 함수이름이 있으면 스스로를 재귀적으로 호출할 수 가 있다. 또한 함수의 객체 구성(object members)들을 접근하는데 사용될 수도 있다(IE 제외). 함수이름이 없다면 익명함수(anonymous function)가 된다.

함수 연산자는 보통 프로토타입(prototype)에 함수를 할당할때 사용된다.

함수 연산자는 함수가 필요한곳에 바로 정의할때 사용될 수 있다, 이 방법은 콜백함수를 작성할때 유용하다.

 

4.1.3. 함수 생성자 (Function constructor)

 

함수 생성자는 인자값들과 본문으로 구성된 문자열을 가지고 함수 객체를 만들어낸다.

 

new Function(문자열...)

 

이 형태는 사용하지 말아야 한다. 자바스크립트의 따옴표 처리 규칙때문에 함수 본문을 문자열로 정확히 표현하는것이 아주 어렵다. 문자열 형태에서 초기 에러 확인이 불가능하다. 컴파일러는 생성자가 매번 호출될때마다 작동되기 때문에 매우 느리고, 각각의 함수는 자체 독립적인 구현이 필요하므로 메모리 소모도 많다.

 

4.2. 객체와 this (Objects and this)

 

함수는 객체이다. 다른객체들과 마찬가지로 구성요소(members) 를 포함할 수 있다. 이 특성때문에 함수는 자체 데이터 테이블을 포함할 수 있고, 또한 객체가 생성자와 관련 메소드를 포함한 클래스같은 역할을 할 수 있게도 한다. 

함수는 객체의 구성요소가 될 수 있다. 함수가 객체의 한 구성요소일때 그 함수를 메소드(method) 라고 부른다. 객체의 메소드가 호출될때 그 객체에 생성되는 this 라는 특별한 변수가 있다.

예를 들어 foo.bar()라는 표현식에서 this 변수는 함수 bar의 여분의 인자값의 한 종류같이 foo객체에 설정된다. 함수 bar는 연관된 객체를 접근하기 위해 this를 참조 가능하다.

do.re.mi.fa() 와 같이 조금 더 깊이 연결되어 있는 경우, this 변수는 do 객체가 아닌 do.re.mi 객체에 설정된다. 단순한 함수 호출에서 this 는 전역 객체 (즉 window)에 설정된다, 이 전역객체는 별로 쓸모가 없다. this의 현재값이 보존되도록 정확히 작동됐어야 하는것이 맞다, 특히 내부함수를 호출할때는 더욱 그러하다.

  

4.3. 생성자 (Constructor)

 

객체를 초기화하는데 사용되는 함수를 생성자(constructors) 라고 부른다. 생성자의 호출 순서는 다른 일반 함수들과 약간 다르다. 생성자는 new 접두어와 함께 호출된다.

 

new Constructor(parameters...)

 

보통 생성자의 이름은 첫자를 대문자로 한다. 

new 접두어는 this 변수의 의미를 바꾼다. this의 일반적이 값 대신 this는 새로운 오브젝트가 된다. 생성자 함수의 본문은 보통 객체의 구성요소들을 초기화한다. return 구문으로 명시적으로 다시 작성되지 않는다면 생성자는 새로운 객체를 리턴한다.

생성자가 있는 객체는 생성자의 프로토타입(prototype) 구성요소의 참조를 포함하는 신비한 프로토타입 링크를 가지게 된다. 

  

4.4. 프로토타입 (Prototype)

 

객체에는 숨겨진 링크 속성이 있다. 이 링크는 그 객체 생성자의 프로토타입(prototype) 구성요소를 가리키고 있다.


점표기법이나 배열표기법으로 객체의 항목들을 접근할때, 그 항목이 객체안에 존재하지 않으면 링크 객체에 있는지 확인한다. 링크 객체에도 없고 그 링크 객체 자체 스스로 링크 객체를 가지고 있다면 그 링크객체에 있는지 확인한다. 그렇게 연결된 고리를 따라 링크 객체들을 다 확인해보고 없으면 undefined 를 리턴한다.

이 프로토타입의 링크 고리의 사용이 상속(inheritance)과 같은 역할을 한다.

할당으로 이 프로토타입(prototype)에 구성요소들을 추가할 수 있다. 아래와 같이 새로운 클래스 Demo를 정의해보았다. 여기서 Demo 클래스는 Ancestor 클래스의 상속을 받고 foo 메소드를 추가했다.

 

function Demo() {}
Demo.prototype = new Ancestor();
Demo.prototype.foo = function () {};

 

4.5. 변수 (Vars)

 

var 구문으로 이름이 있는 변수를 정의할 수 있다. 함수 내부에서 var로 정의하게 되면, 함수내 범위(function-scope)의 변수로 정의된다. 이렇게 정의된 변수들은 함수 외부에서는 접근이 불가능하다. 자바스크립트에서는 이것보다 더 작은 범위는 없다. 특히 블록범위(block-scope)는 존재하지 않는다.

함수내부에서 var 없이 정의된 변수들은 아마도 전역객체일 바깥 범위에 속하게 된다.

명시적으로 초기화되지 않은 변수들은 undefined 값은 가지게 된다.

변수들은 타입이 정해져있지 않다. 하나의 변수는 객체 또는 문자열 또는 숫자 또는 boolean 또는 null 또는 undefined 어떤값도 참조할 수 있다.

새로운 변수들은 함수가 호출될때마다 만들어진다. 이것때문에 재귀적(recursive) 함수가 가능하다.

 

4.6. 클로져 (Closure)

 

함수는 다른 함수내부에 정의될 수 있다. 이 내부함수는 외부함수의 변수와 매개변수들(parameters)을 접근할 수 있다. 만약 내부함수의 참조가 살아있으면 (예를 들어 콜백(callback) 함수같이), 외부함수의 변수도 역시 살아있게 된다.

 

4.7. 리턴 (Return)

 

자바스크립트에는 void 형이 없기때문에 모든 함수는 어떤 값은 리턴해야한다. this를 기본값으로 리턴하는 생성자를 제외하면, 리턴의 기본값은 undefined 이다. 

 

 

5. 구문 (Statements)

 

자바스크립트 구문에는 다음과 같은것들이 있다, var, if, switch, for, while, do, break, continue, return, try, throw, 그리고 with. 이 구문들 대부분은 다른 C 계열 언어와 동일하게 작동한다.

var 구문은 선택적인 초기화 구문과 함께, 콤마로 구분되어진 하나 또는 그 이상의 변수 이름들의 목록이다.

 

var a, b = window.document.body;

 

var 구문이 함수 밖에서 사용되면 이 변수는 전역객체에 포함된다. 함수 안에서 사용되면, 함수내 지역변수로 정의된다.


if, while, do 구문들과 논리적 연산자에서 false, null, undefined, "" (빈 문자열), 그리고 숫자 0false로 취급된다.

그 외 모든 값들은 true로 취급된다.

switch 구문내의 case 는 꼭 상수일 필요없이 표현식(expression)일 수 있다. 또한 문자열도 가능하다.

for 구문에는 2가지 형태가 있다. 첫번째는 일반적인 (초기값; 검증; 증가) 형태이고 두번째는 객체 요소 나열이다.

 

for (name in object) {
    if (object.hasOwnProperty(name)) {
        value = object[name];
    }
}

 

블록(block)은 객체(object)안의 각각의 이름(name)에 따라 실행된다. 그 이름들이 생성되는 순서는 정해져있지 않다.


구문은 콜론과 함께 쓰는 식별자인 접두어와 함께 쓸 수 있다.

with 구문은 쓰지 말아야 한다.


 

6. 연산자 (Operators)

 

자바스크립트에는 아주 많은 연산자들이 있다. 연산자 대부분은 다른 C계열 언어와 똑같은 방식으로 작동한다. 살펴봐야할 약간의 다른점들이 있다.

+ 연산자는 더하기와 문자열 연결 2가지 모두에 사용된다. 만약 피연산자가 문자열이면 문자열을 연결한다. 이것은 실수를 유발하기도 한다. 예를 들어 '$' + 3 + 4'$7' 이 아닌  '$34' 를 만들어낸다.

+ 는 문자열을 숫자로 바꾸는 접두어 연산자로 사용될 수 도 있다. 

!! 는 피연산자를 boolean값으로 바꾸는 접두어 연산자로 사용될 수 도 있다.

&& 연산자는 보통 논리적 '그리고(and)' (logical and) 로 사용된다. 이것을 값지킴(guard) 라고도 부른다. 만약 첫번째 피연산자가 false, null, undefined, "" (빈문자열), 또는 숫자 0 이면 첫번째 피연산자를 리턴한다. 그렇지 않으면 두번째 피연산자를 리턴한다. 이것은 null 확인을 위한 편한 방법을 제공한다.

 

var value = p && p.name; /* p가 값이 있는 경우에만 p로부터 name 값을 가지고 올 수 있다. 에러를 피하기 위한 방법이다. */

 

|| 연산자는 논리적 '또는(or)'라 보통 부른다. 이것은 기본값(default)이라도 부른다. 첫번째 피연산자가 false, null, undefined, "" (빈문자열), 또는 숫자 0 이면 두번째 피연산자를 리턴한다. 그렇지 않으면 첫번째 피연산자를 리턴한다. 이것은 기본값을 정하는 편한 방법을 제공한다.

 

value = v || 10; /* v 값을 사용한다, 하지만 v가 값을 가지고 있지 않다면 대신 10을 사용한다. */

 

자바스크립트에는 비트(bitwise) 연산자와 쉬프트(shift) 연산자가 있지만 그것들을 적용할 정수형(iteger type)이 없다. 숫자 피연산( 64비트 소수점 자리 숫자)는 연산전에  32비트 정수형으로 변환되고, 연산후에 다시 소수점 자리 숫자로 되돌려진다.

자바스크립트에는 void는 형(type)이 아니고, 접두어 연산자이다. 이것은 항상 undefined를 리턴한다. 이것은 아주 작은 값을 가지고 있다. 습관적으로 void 를 쓸 경우 이상한 작동으로 혼란스럽게 될 수 있다.

typeof 연사자는 피연산자의 형(type)에 근거한 문자열을 리턴한다.

잘못된 값이 나오는 type도 있다.

Object           'object'

Array             'object'

Function         'function'

String             'string'

Number           'number'

Boolean          'boolean'

null                'object'

undefined        'undefined'

 

 

7. 그 외 몇가지 내용들 (Potpourri)

 

7.1. 전역 객체 (Global Object)

 

전역 객체는 다른 함수나 객체안에서 정의되지 않은 모든 함수와 변수를 담고 있다. 놀랍게도 전역객체는 명시적인 이름을 가지고 있지 않다. 가끔 this 변수가 전역객체를 가리킬때도 있지만 그런 경우는 거의 드물다. 웹브라우져에서 windowself 는 전역객체를 가리키는 전역객체의 요소들이다. 그렇게 전역객체를 가르키는 간접적인 방법을 제공한다.

변수를 사용할때 그 변수가 현재 범위(scope)에 없으면 전역객체에 있는지 찾는다. 만약 거기에도 없다면 에러가 난다.

ECMAScript 사양은 여러개의 전역객체 또는 상태조건(context)에 관해 설명하지 않지만 브라우져가 이것을 지원해준다. 각 창에는 자체의 전역객체가 있다.

 

7.2. 세미콜론 삽입 (Semicolon Insertion)

 

자바스크립트 언어에서 실수 중 하나인것은 세미콜론 삽입이다. 구문을 종결하는데 세미콘론의 사용이 선택적이다. IDE 와 쉘프로그램에서는 세미콜론을 삽입하는것이 맞다. 언어정의에서 컴파일러가 세미콜론을 삽입하게 하는것은 옳지 않다. 꼭 세미콜론을 사용해라.

 

7.3. 예약어 (Reserved Words)

 

자바스크립트는 예약어에 대한 제한이 엄격하다. 예약어들은 아래와 같다.

 

abstract

boolean break byte

case catch char class const continue

debugger default delete do double

else enum export extends

false final finally float for function

goto

if implements import in instanceof int interface

long

native new null

package private protected public

return

short static super switch synchronized

this throw throws transient true try typeof

var volatile void

while with

 

대부분의 예약어는 심지어 자바스크립트 언어에서 쓰이지도 않는다. 예약어는 아래의 용도로 사용될 수 없다.

 

1. 객체 간단표기법의 이름
2. 점표기법의 요소이름
3. 함수 인자
4. var 로 선언되는 변수이름
5. 순수한 전역 변수
6. 구문 표식어

 

처음 2개(1,2)의 제한은 꼭 지켜야 한다. 2번째 2개의 제한 (3,4)은 안지켜도 되지만, 그런 경우는 아주 드물다.

 

 

참고자료

댓글 2개

(1)
정말 유명하고 좋은 글 번역해주셔서 너무 감사합니다.

더글라스 크락포드의 글을 보면 아주 핵심적인 부분들만 간결하게 쓰는것 같습니다.
(2)
정말 좋은일 하셨네요.

댓글쓰기

관련 post

L

[번역] 자바스크립트 클래스를 정의하는 3가지 방법 (3 ways to define a JavaScript class)

Q

자바스크립트로 문자열에서 html 태그 제거하기

K

자바스크립트 쿠키 클래스

K

javascript 로 codeigniter uri->segment() 함수 구현하기