델리마운트 위키

자바스크립트 #

자바스크립트(JavaScript)는 흔히 동적인 웹페이지를 만드는 용도로 웹 브라우저에서 많이 쓰여온 스크립트 언어입니다.

라이브러리 #

자바스크립트의 주요 라이브러리로 다음과 같은 것들이 있습니다. jQuery, YUI, Ext JS
  • [http]jQuery Tutorials - jQuery는 최근 급부상중인 라이브러리입니다. 단기간에 크게 성장한, 잘 짜여진 라이브러리라는 장점이 있으나, 시작된지 얼마 안되었다는 것은 단점이기도 합니다.
  • [http]YUI Getting Started - YUI는 Yahoo 주도의 라이브러리입니다. 많은 위젯이 공개되어 있다는 장점이 있습니다. DOM 확장을 피해 메모리나 속도 등에 장점도 있어 보입니다. 객체지향적인 부분이 부족한 것이 단점으로 보입니다.
  • [http]Ext JS Tutorials - Ext JS 는 Ext JS, LLC 에서 만든 라이브러리입니다. 설계도 깔끔하고 전체적으로 잘 만들어진 프레임워크로 미려한 UI 위젯들이 장점입니다. 단, 특정 회사의 기술이라는 점은 단점입니다. 라이센스는 Commercial License 와 LGPL 3.0, OEM/Reseller License 를 지원합니다.

제 예정인 부분
  • [http]jQuery Tutorials - jQuery는 최근들어 급부상중인 라이브러리인 듯 합니다. amazon.com에서 검색해보니 벌써부터 책들이 많이 쓰여졌네요. 사용해보니 전체적으로 깔끔하고 짜임새 있다는 인상을 줍니다. 기대되는 라이브러리 입니다.
  • [http]YUI Getting Started - YUI는 DOM 확장은 피하는 듯 합니다. 대신 Wrapping Class를 제공하는 것 같네요. DOM 확장을 하지 않아 메모리나 속도에 장점이 있을 듯 합니다. 아직 알아본 바가 얕기 때문에, 정확한 파악은 되지 못합니다. YUI는 많은 위젯들로 유명한 듯 합니다. 저희가 찾고 잇는 라이브러리는 크로스 브라우징을 위한 코어 부분이기 때문에, 이 위젯들은 장점으로 활용하기 힘들 듯 합니다.
  • [http]Ext JS Tutorials - Ext JS 는 YUI를 모태로 시작했었다는 것 같습니다만 정확하지는 않습니다. Event 모델을 보니 YUI와 굉장히 흡사한 구조이고, 문서에도 언급이 되어 있더군요. 구조화가 잘 되어있고, 클래스 설계도 깔끔하고 전체적으로 잘 만들어진 프레임워크라는 인상이었습니다. 대신 특정 회사가 만든 라이브러리이고, 다른 프레임워크에 비해서 이 특정 회사의 기술이라는 부분을 커버할 정도의 장점은 느끼지 못했습니다. 사실 Ext JS의 큰 장점은 UI 쪽이라고 보는데, 저희가 찾고 있는 라이브러리의 스코프는 UI쪽이 아닌, 크로스 브라우징의 코어한 부분들이기 때문입니다.
저희는 아무래도 jQuery를 사용할 듯 합니다.

포지션 관련 #

  • [http]DOM:element.offsetParent offsetParent에 관한 내용이며, offsetParent가 되는 규칙에 대하 간략히 설명되어 있습니다. offset과 관련된 속성들은 DOM 표준은 아니라고 MDC에서 말하며, MSIE에서 사용되던 것이 대부분의 브라우저에서 지원하게 된 것인듯 합니다.
Mozilla Developer Center Microsoft Developer Network offset관련 속성들은, 쉽게 말해 계산된 값이라고 생각되나, 아직 완벽한 조사는 이루어진 상태가 아니며, 이는 추후에 다시 이야기 하도록 하겠습니다.

객체 레퍼런스 반환 #

자바스크립트 함수에서 객체를 반환하면, 그 객체의 레퍼런스를 반환하게 됩니다. 따라서 객체의 멤버함수가 멤버 객체를 반환했을 때, 반환 받은 쪽에서 이를 변경할 수 있습니다. 이에 대해서 이펙티브 자바 항목 24를 참고해보면, 객체의 방어 복사에 대해 이야기 합니다. 만약 반환하는 멤버 객체가 변경가능하며, 그 변경이 현재 객체에 문제가 될 수 있다면, 객체를 복사해서 반환하라고 하는데요. 이때, 객체를 반환받아 사용할 개발라인과 반환해줄 개발라인이 서로 신뢰관계에 있다면, 궂이 방어복사를 하지 않고 성능을 위해서 레퍼런스 반환을 하는 것도 방법이라고 합니다. 복사를 해서 반환하면 그만큼 성능이 떨어지니까요.

자바스크립트 자료형 #

null #

  • 객체가 아님(a value that represents no object)을 나타내는 값.
  • 형변환
    • (Boolean)null == false
    • (Number)null == 0
    • (String)null == "null"

undefined #

  • 객체에 assign이 되지 않았음을 나타내는 값.
  • undefined와 null은 같지 않음
    • undefined == null (true)
    • undefined === null (false )
  • 형변환
    • (Boolean)undefined == false
    • (Number)undefined == NaN
    • (String)undefined == "undefined"

window #

웹 브라우저의 window 객체는, 곧 Global 이라고 할 수 있습니다. 예를 들어 다음의 코드를 보면,
var hello = "Hello";

alert( hello );
alert( window.hello );
alert( hello == window.hello );
세번의 경고창이 순서대로 Hello, Hello, true 일 것입니다. 우리가 흔히 쓰는 document, alert(), parseInt() 등의 전역 변수/함수 들은 모두 window.document, window.alert(), window.parseInt() 이며, window 가 곧 Global 이기 때문에, window.은 생략 가능한 것이라고 합니다.

참고 #

  • JavaScript - The Definitive Guide 5th Edition
    • Part III. Core JavaScript Reference - Global
    • Part IV. Client-Side JavaScript Reference - window
    • Chapter 13. JavaScript in Web Browsers
    • Chapter 14.Scripting Browser Windows
제게 Core Javascript의 Global 개념에 대한 이해 부족과, 해석능력이 부족한 관계로 window inherits Global 이라는 구문이 헷갈려, window가 Global을 상속했다는건지, window = Global 이라는건지 잘 모르겠으나, 당장에 필요한 정보는 얻었기 때문에 이는 나중에 알아보도록 하겠습니다.

유효 범위 #

자바스크립트에서 주의해야 할 변수 유효범위 규칙입니다. 아직 정리중...
  • 변수 유효범위
    var globalVar = "global"; // 전역 변수.
    
    function Hello() {
        var localVar = "local"; // 지역 변수.
        implicitlyVar = "implicitly" // 전역 변수.
            // (var 선언이 없으면 전역 변수로 선언됨)
    
        for ( var sameAsLocalVar = 0; sameAsLocalVar < 10; ++sameAsLocalVar ) {
            // 지역 변수.
                // (for문 안에서 선언했지만, 자바스크립트는 블록 스코프가 없기 때문에,
                //  Hello함수의 지역 변수가 됨. for문의 밖에서도 접근 가능.)
        }
    }
     
  • 유효 범위 추가
    var scope = "global";
    
    function Hello() {
        alert( scope ); // "global" 출력이 기대되나, "undefined"가 출력됨.
        var scope = "local";
        alert( scope ); // "local"이 출력됨.
    }
     
    • 지역변수의 선언은 함수 실행시점에 이루어짐.
  • 우선 순위
    var scope = "global"; // 전역 변수.
    
    function Hello( scope ) { // 지역 변수. (함수 파라미터도 함수의 지역변수임.)
        var scope = "local" // 지역 변수.
            // (이미 지역변수 scope가 있기 때문에,
            //  declare 작업은 일어나지 않고, assign 작업만 일어남.)
    }
     
    • 전역 변수보다는 지역변수가 해당 지역에서 우선순위를 가짐.
    • 변수의 선언은 여러번 가능함.

클로저 #

자바스크립트의 클로저 #

참고 #

이벤트 버블 #

이벤트 별로 버블은 한번만 하는 것 같습니다. 이벤트 버블을 취소하면, 해당 이벤트의 핸들러가 여러 개라도 모두 취소됩니다.
var hello = $( "Hello" );
Event.observe( hello, "click", function( e ) { Event.stop( e ); } );
Event.observe( hello, "click", function( e ) {} );

Event.observe( document, "click", function( e ) { alert("clicked"); } );
예제에서 alert 창은 뜨지 않습니다. (크로스 브라우징을 위해서 Prototype을 사용했습니다.)

자바스크립트의 OOP(가제) #

자바스크립트 압축 #

Mootools 풀버전을 압축하였을 시에, Packer가 압축률이 가장 높았음.

참고 #

  • [http]Comparison of layout engines (ECMAScript) - 각 브라우저의 엔진별 JavaScript 지원내역이 정리되어있는 페이지 입니다. 인터넷 익스플로러는 Trident 엔진, 파이어폭스는 Gecko 엔진입니다.
  • [http]Ext JS - 자바스크립트 위젯 툴킷
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2009-09-04 15:45:01
Processing time 0.8398 sec