드림코딩 by 엘리 님의 자바스크립트 기초 강의를 보고 정리한 글입니다.
javascript의 경우 procedural language
다.
Object가 추가되긴 했지만 진짜 Java 같은 Object Oriented language 가 아닌
prototype
을 베이스로 한 가짜의 object oriented 다.
javascript에서 function은 object 다.
그래서 function을 인자로 받거나 function을 반환 받는 것이 가능하다.
또한 function안에서 function을 정의하는 것도 가능 함. (여기서 closure 개념이 나옴.)
js에서는 function의 인자 type이나 return type을 선언하지 않는다.
그래서 typescript를 쓰는 것이 명확하고 개발 일을 더 쉽게 만들어준다.
(function의 선언부만 보고 그 function이 어떤 일을 하는지 명확히 알 수 있게 되기 때문.)
typescript 홈페이지에 들어가면
typescript 언어로 코드를 쓰면 js로 컴파일된 내용을 확인해 볼 수 있다.
js 를 다 배우고 나면 typescript를 꼭 배우길 바란다.
function의 parameter의 변수 타입에 따라 pass방식이 두 가지로 나뉜다.
passed by value
passed by reference
Default parameters (ES6에서 추가 됨)
=
으로 parameter의 default값을 지정할 수 있다.Rest parameters (ES6에서 추가 됨)
function printAll(...args) {
for (let i = 0; i < args.length; i++) {
console.log(args[i]);
}
for(const arg of args) {
console.log(arg)
}
}
printAll('AAA', 'BBB', 'CCC');
return undefined
가 있는 것과 같은 효과다.early return
, early exit
을 하는 것이 좋다. (현업 꿀팁)js는 first-class function 을 지원하는 언어다.
anonymous function (익명 함수)
로 만들 수도 있고 named function
으로 만들 수도 있다.//익명 함수
const print = function () {
console.log('print');
}
//named 함수
const print = function print() {
console.log('print');
}
named 함수
의 경우debugging
을 할 때 debugger의 stack trace
에 함수 이름이 나오게 하기위해서 사용하거나var
만 hoisting하는 것이 아니라 function
도 hoisting 한다. (function hello() {
console.log('IIFE');
})();
이렇게 function 전체를 괄호로 묶어서 인자를 부분을 넣어 주면 된다!
근데 최근에 잘 쓰이진 않음.