1장 본질 JavaScript의 일부 기능은 가치보다 문제가 더 많습니다. 그중 일부 기능은 사양이 매우 불완전하여 이식성 문제를 일으킬 수 있으며, 일부 기능은 코드 생성을 이해하고 수정하기 어렵게 만들고, 일부 기능은 코딩 스타일을 지나치게 복잡하게 만들고 오류가 발생하기 쉽습니다. 일부 기능은 단지 설계 오류일 뿐입니다. 때때로 언어 디자이너는 실수를 합니다.
대부분의 프로그래밍 언어에는 좋은 부분과 약한 부분이 있습니다. 나는 좋은 부분만 사용하고 헛소리를 피한다면 더 나은 프로그래머가 될 수 있다는 것을 깨달았습니다. 결국, 형편없는 부품으로 어떻게 좋은 것을 만들 수 있습니까?
표준 위원회가 언어의 결함이 있는 부분을 제거하는 것은 거의 불가능합니다. 그렇게 하면 쓸모없는 부분에 의존하는 모든 나쁜 프로그램이 손상될 수 있기 때문입니다. 일반적으로 기존 결함 더미 위에 더 많은 기능을 추가하는 것 외에는 할 수 있는 일이 없습니다. 그리고 새로운 기능과 기존 기능이 항상 조화롭게 공존하는 것은 아니므로 더 쓸모없는 부분이 생길 수 있습니다.
그러나 자신만의 하위 집합을 정의할 수 있는 권한이 있습니다. 최고의 부분을 바탕으로 더 나은 프로그램을 작성할 수 있습니다. 자바스크립트에서 쓸모없는 부분의 비율이 예상을 뛰어넘습니다. 그것은 존재하지 않는 것에서 놀라울 정도로 짧은 시간 안에 전 세계적으로 채택되기 시작했습니다. 그것은 실험실에서 시도되고 다듬어진 적이 없습니다. 아직 매우 조잡했을 때는 Netscape의 Navigator 2 브라우저에 직접 통합되었습니다. Java 애플릿이 사라지면서 JavaScript는 기본 "웹 언어"가 되었습니다.프로그래밍 언어로서 JavaScript의 인기는 품질과 거의 완전히 무관합니다.
다행히도 JavaScript에는 매우 필수적인 부분이 있습니다. JavaScript의 가장 중요한 부분은 너무 깊이 숨겨져 있어서 수년 동안 JavaScript에 대한 주류 견해는 추악하고 쓸모없는 장난감이라는 것이었습니다. 이 책의 목적은 자바스크립트의 본질을 밝히고 그것이 뛰어난 동적 프로그래밍 언어라는 것을 모든 사람에게 알리는 것입니다.
아마도 꼭 필요한 부분만 학습할 때 가장 큰 장점은 쓸데없는 부분을 생각하지 않아도 된다는 점일 것입니다. 나쁜 패턴을 학습하지 않는 것은 매우 어렵습니다. 이것은 우리 대부분이 직면하기를 꺼리는 매우 고통스러운 일입니다. 때로는 학생들이 더 잘 배울 수 있도록 언어의 하위 집합이 개발되기도 합니다. 하지만 여기에서는 마스터 전문가에게 더 잘 작동하는 JavaScript의 하위 집합을 공식화했습니다.
1.1 JavaScript를 사용하는 이유 JavaScript는 웹 브라우저의 언어이기 때문에 중요한 언어입니다. 브라우저와의 통합으로 인해 세계에서 가장 인기 있는 프로그래밍 언어 중 하나가 되었습니다. 동시에 세계에서 가장 과소평가되는 프로그래밍 언어 중 하나이기도 합니다. 브라우저 API와 DOM(문서 객체 모델)은 너무 형편없어서 JavaScript가 불공평한 평가를 받습니다.
자바스크립트는 소위 주류 언어가 아니기 때문에 가장 멸시받는 언어입니다. 일부 주류 언어에 능숙하지만 JavaScript만 지원하는 환경에서 프로그래밍하는 경우 JavaScript를 강제로 사용하는 것이 상당히 짜증날 수 있습니다. 대부분의 사람들은 JavaScript를 먼저 배울 필요를 느끼지 않지만 JavaScript가 자신이 사용하려는 주류 언어와 매우 다르며 이러한 차이점이 중요하다는 사실에 놀랐습니다.
JavaScript의 놀라운 점은 언어나 프로그래밍에 대한 지식이 없어도 JavaScript로 작업을 수행할 수 있다는 것입니다. 표현력이 매우 강한 언어입니다. 무엇을 해야할지 알면 더 잘 작동합니다. 프로그래밍은 어렵다. 아무것도 모르고 일을 시작해서는 절대 안 됩니다.
1.2 JavaScript 분석 JavaScript는 몇 가지 매우 좋은 아이디어와 몇 가지 매우 나쁜 아이디어를 기반으로 구축되었습니다.
정말 좋은 아이디어에는 함수, 약한 타이핑, 동적 객체, 표현력이 풍부한 리터럴 표현이 포함됩니다. 이러한 나쁜 아이디어에는 전역 변수를 기반으로 하는 프로그래밍 모델이 포함됩니다.
JavaScript 함수는 (주로) 어휘 범위 지정을 기반으로 하는 최상위 개체입니다. JavaScript는 주류가 된 최초의 람다 언어였습니다. 실제로 JavaScript는 Java보다 Lisp 및 Scheme과 더 많은 공통점을 가지고 있습니다. C 옷을 입은 Lisp입니다. 이는 JavaScript를 매우 강력한 언어로 만듭니다.
강력한 타이핑은 오늘날 대부분의 프로그래밍 언어에서 널리 사용되는 요구 사항입니다. 강력한 타이핑을 통해 컴파일러가 컴파일 타임에 오류를 감지할 수 있다는 아이디어입니다. 버그를 더 일찍 발견하고 수정할수록 비용은 더 저렴해집니다. JavaScript는 약한 유형의 언어이므로 JavaScript 컴파일러는 유형 오류를 감지할 수 없습니다. 반면에 약한 타이핑은 실제로 무료입니다. 복잡한 하위 시스템을 만들 필요도 없고, 캐스트를 수행할 필요도 없으며, 원하는 동작을 얻기 위해 유형 시스템을 조작할 필요도 없습니다.
JavaScript에는 매우 강력한 객체 리터럴 표현이 있습니다. 객체는 구성요소 부분을 나열하여 간단하게 생성할 수 있습니다. 이 표현은 널리 사용되는 데이터 교환 형식인 JSON을 탄생시켰습니다.
프로토타입 상속은 JavaScript에서 논란의 여지가 있는 기능입니다. JavaScript에는 객체가 다른 객체로부터 직접 속성을 상속받는 클래스 없는 객체 시스템이 있습니다. 이것은 정말 강력하지만 프로토타입 상속은 클래스를 사용하여 객체를 생성하도록 훈련받은 프로그래머에게는 생소한 개념입니다. 클래스 기반 디자인 패턴을 JavaScript에 직접 적용하려고 하면 좌절감을 느낄 것입니다. 그러나 JavaScript의 프로토타입 특성을 사용하는 방법을 배우면 노력이 보상을 받을 것입니다.
JavaScript는 핵심 아이디어를 선택했다는 이유로 비판을 받아 왔습니다. 그러나 대부분의 경우 이러한 옵션이 적합합니다. 하지만 매우 나쁜 옵션이 하나 있습니다. JavaScript는 연결을 위해 전역 변수에 의존합니다. 모든 컴파일 단위의 모든 최상위 변수는 전역 개체라는 공통 네임스페이스로 그룹화됩니다. 전역 변수는 악마이고 JavaScript의 기본이기 때문에 이것은 나쁜 것입니다.
어떤 경우에는 쓸모없는 부분을 무시할 수 없습니다. 또한 피할 수 없는 버그도 있는데, 이런 부분에 대해서는 지적해드리겠습니다. 형편없는 부분과 이를 잘못 사용하는 방법에 대해 배우고 싶다면 다른 JavaScript 책을 확인하세요.
자바스크립트는 많은 차이점이 있는 언어입니다. 여기에는 많은 버그와 날카로운 모서리가 포함되어 있으므로 "내가 왜 JavaScript를 사용하는가?"라고 궁금해하실 수 있습니다. 답은 두 가지입니다. 첫 번째는 선택의 여지가 없다는 것입니다. 웹은 중요한 애플리케이션 개발 플랫폼이 되었으며, JavaScript는 모든 브라우저가 인식할 수 있는 유일한 언어입니다. 불행히도 Java는 브라우저 환경에서 실패합니다. JavaScript의 활발한 발전은 JavaScript가 장점을 가지고 있음을 보여줍니다.
또 다른 대답은 결함에도 불구하고 JavaScript가 정말 좋다는 것입니다. 가볍고 표현력이 뛰어납니다.그리고 일단 익숙해지면 함수형 프로그래밍은 정말 재미있습니다.
그러나 이 언어를 더 잘 사용하려면 그 한계를 알아야 합니다. 가차 없이 공개하겠습니다. 이것이 당신을 낙담하게 두지 마십시오. 언어의 가장 좋은 부분은 약점을 보완하는 것 이상입니다.
1.3 간단한 시험장 웹 브라우저와 텍스트 편집기만 있다면 JavaScript 프로그램을 실행하는 데 필요한 모든 것이 갖추어져 있습니다. 먼저, program.html이라는 이름의 HTML 파일을 생성하십시오: