
`
`
HTML로는 웹의 내용을 작성하고, CSS로는 웹을 디자인한다면 자바스크립트로는 웹의 동작을 구현할 수 있다!
자바스크립트로 작성한 프로그램을 스크립트(script)라고 부른다.
처음 자바스크립트는 'LiveScript'라는 이름이었지만 당시 자바의 인기가 높았기에 자바의 동생격 언어로 홍보하면 도움될 것이라는 의사결정을 내리고 이름을 바꾸었다. 그러나, 자바스크립트는 자바와 독자적 언어이며 아무런 연관이 없다!

➡️ 컴파일러는 프로그래밍 언어를 다른 프로그래밍 언어로 번역한다. 즉, 하이레벨 프로그래밍 언어에서 기계어로 변환하는 것이다.
➡️ 인터프리터는 프로그래밍 언어를 프로그래밍 언어로 '번역'하는 것이 아니라, 그저 '이해'한다.
즉 인터프리터 언어는 컴파일 작업을 거치지 않고, 소스 코드를 바로 실행할 수 있는 언어이다.
즉 코드가 실행되는 단계인 '런타임'에, 한 줄 씩 byte code로 변환된 후 실행된다.
개발자가 별도의 컴파일 작업을 수행하지 않아도 되므로 실행 파일도 생성되지 않는다.
-> 자바스크립트는 웹 브라우저에 포함된 자바스크립트 인터프리터가 소스 코드를 직접 해석하여 바로 실행한다.
➡️Statically typed languages
컴파일 시점에 Type Checking이 이뤄진다.
Type 에러는 프로그램 실행 이전에 감지된다.
✔ C, C++, Java, Scala, etc➡️Dynamically typed languages
런타임 시점에 Type Checking이 이뤄진다.
프로그램 실행 도중에 Type Error가 발생할수 있다.
✔ Python, Javascript, Ruby, List, etc
동적타입핑 언어란, 런타임에 타입 지정이 실행되는 언어이다!
변수 선언 시 타입을 명시적으로 선언하지 않고, 타입을 추론한다.
"컴퓨터 프로그래밍 언어에서, 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체."
'일급' 이란 사용할 때 다른 요소들과 아무런 차별이 없다는 것을 뜻한다.
-> Javascript와 Python은 일급객체 언어이지만 C언어는 일급객체 언어가 아니다!
"함수를 일급객체로 취급하는 것"을 의미한다.
자바스크립트에서 함수는 일급객체이다.
일급 함수를 가진 언어에서는, 함수를 변수에 할당하거나, 함수를 다른 함수에 인수로 제공하거나, 함수가 함수를 반환할 수 있다.
JavaScript
const foo = function() {
console.log("foobar");
}
// 변수를 사용해 호출
foo();
function sayHello() {
return "Hello, ";
}
function greeting(helloMessage, name) {
console.log(helloMessage() + name);
}
// `sayHello`를 `greeting` 함수에 인자로 전달
greeting(sayHello, "JavaScript!");
function sayHello() {
return function() {
console.log("Hello!");
}
}