웹 페이지에 생동감을 불어넣기 위해 만들어진 프로그래밍 언어이다.
스크립트는 웹페이지의 HTML안에 작성할 수 있는데, 웹 페이지를 불러올 때 스크립트가 자동으로 실행된다.
스크립트는 특별한 준비나 컴파일 없이 보통의 문자 형태로 작성할 수 있고, 실행도 할 수 있다.
이런 관점에서 보면 자바스크립트는 자바와 매우 다른 언어라고 할 수 있다.
이름은 자바에서 차용해왔지만 자바스크립트와 자바는 독자적인 언어이다. 꾸준히 발전을 거듭하면서 ECMAScript라는 고유한 명세를 갖춘 독립적인 언어가 되었다.
자바스크립트는 브라우저뿐만 아니라 서버에서도 실행할 수 있다.
이외에도 자바스크립트 엔진이라 불리는 특별한 프로그램이 들어 있는 모든 디바이스에서도 동작한다.
브라우저에는 자바스크립트 가상 머신이라고 불리는 엔진이 내장되어있다.
v8 - Chrmome과 Opera에 쓰임
SpiderMonkey - Firefox에서 쓰임
IE는 버전에 따라 Trident, Chakra라 불리는 엔진을 사용
엔진은 프로세스 각 단계마다 최적화를 진행한다.
심지어 컴파일이 끝나고 실행 중인 코드를 감시하면서
이 코드로 흘러가는 데이터를 분석하고, 분석 결과르ㅏㄹ 토대로 기계어로 전환된 코드를 다시 최적화하기도 한다. 이런 과정을 거치면 스크립트 실행 속도는 더욱 더 빨라진다.
모던 자바스크립트는 안전한 프로그래밍 언어이다.
메모리나 CPU같은 저수준 영역의 조작을 허용하지 않는다.
애초에 이러한 접근이 필요치 않은 브라우저를 대상으로 만든 언어이기 때문이다.
자바스크립트의 능력은 실행 환경에 상당한 영향을 받는다.
Node.js환경에선 임의의 파일을 읽거나 쓰고, 네트워크 요청을 수행하는 함수를 지원_한다.
브라우저 환경에서는 웹페이지 조작, 클라이언트와 서버의 상호작용에 관한 모든 일을 할 수 있다.
브라우저는 보안을 위해 자바스크립트의 기능에 제약을 걸어놓았다.
이런 제약은 악성 웹페이지가 개인 정보에 접근하거나 사용자의 데이터를 손상시키는 것을 막기 위해 만들어졌다.
웹 페이지 내 스크립트는 디스크에 저장된 임의의 파일을 읽거나 쓰고, 복사하거나 실행할 떄 제약을 받을 수 있다. 운영체제가 지원하는 기능을 브라우저가 직접 쓰지 못하게 막혀있기 때문이다.
하지만 모던 브라우저를 사용하면 파일을 다룰 순 있다 하지만 접근은 제한되어 있다. 사용자가 브라우저 창에 파일을 끌어다 두거나, input태그를 통해 파일을 선택할 때와 같이 특정한 상황에서만 파일 접근을 허용한다.
카메라나 마이크 같은 디바이스와 상호작용 하라면 사용자의 명시적인 허가가 있어야한다. 자바스크립트가 활성화된 페이지라도 사용자 몰래 웹 카메라를 자동 시켜 수집한 정보를 전송할 수 없다.
브라우저 내 탭과 창은 대개 서로의 정보를 알 수 없다. 하지만 자바스크립트를 사용해 한 창에서 다른 창을 열 때는 예외가 적용된다.
하지만 이 경우에도 도메인이나 프로토콜, 포트가 다르다면 페이지에 접근할 수 없다. 이런 제약사항을 동일 출처 정책이라고 브른다.
이 정책을 피하려면 두 페이지는 데이터 교환에 동의해야하고 동의와 관련된 특수한 자바스크립트 코드를 포함하고 있어야한다.
예를들어 http://anysite.com 에서 받아온 페이지가 http://gmail.com에서 받아온 페이지 상의 정보에 접근하여 중요한 개인정보를 훔치는 것을 막기 위함이다.
이 세가지 모두를 지원하는 브라우저 연관 기술은 자바스크립트뿐이다.
이런 특징 때문에 자바스크립트는 브라우저 인터페이스를 만들 때 가장 널리 사용되고 있다.
이 외에도 자바스크립트를 이용해 서버나 모바일 앱 등을 만드는 것도 가능하다.