익명의 자체 참조 함수 클로저가 JavaScript에서 매우 널리 사용된다는 사실은 JavaScript가 불완전한 스펙임을 암시합니까? 우리는 이것의 많은 것을 본다 :
(function () { /* do cool stuff */ })();
그리고 모든 것이 맛의 문제라고 생각하지만 원하는 모든 것이 개인 네임 스페이스 일 때 이것이 kludge처럼 보이지 않습니까? JavaScript가 패키지 및 적절한 클래스를 구현할 수 없습니까?
ECMAScript를 기반으로하는 ActionScript 3과 비교해보십시오.
package com.tomauger {
import bar;
class Foo {
public function Foo(){
// etc...
}
public function show(){
// show stuff
}
public function hide(){
// hide stuff
}
// etc...
}
}
JavaScript에서 수행하는 컨벌루션과 대조적으로 ( jQuery 플러그인 저작 문서에서 제공 ) :
(function( $ ){
var methods = {
init : function( options ) { // THIS },
show : function( ) { // IS },
hide : function( ) { // GOOD },
update : function( content ) { // !!! }
};
$.fn.tooltip = function( method ) {
// Method calling logic
if ( methods[method] ) {
return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
} else if ( typeof method === 'object' || ! method ) {
return methods.init.apply( this, arguments );
} else {
$.error( 'Method ' + method + ' does not exist on jQuery.tooltip' );
}
};
})( jQuery );
이 질문이 환경 설정 및 프로그래밍 스타일에 대한 불만으로 쉽게 변질 될 수 있음을 알고 있지만 실제로는 숙련 된 프로그래머가 이에 대해 어떻게 느끼는지, 새로운 언어에 대한 다른 특유성을 배우는 것과 같은 자연 스러움을 느끼는지 궁금합니다. 구현되지 않은 기본 프로그래밍 언어 구성 요소에 대한 해결 방법처럼?