function log (message) {
console.log(message);
}
log('Hello@')
log(1234)
javascript 는 타입이 없다
함수 자체만 보았을땐 문자만 전달하는지 숫자만 전달하는지는 알 수 없음
타입이 중요한 경우는 javascript 는 난해할 수 있음
-parameters
// premitiive parameters: passed by value
// 메모리에 벨류가 그대로 저장되어 있기때문에 벨류가 전달되고
// object parameters: passed by reference
// 메모리에 레퍼런스가 저장되어 있어서 레퍼런스가 전달됨
function changeName(obj){
obj.name = 'coder';
}
const kim = { name: ' kim '};
changeName(kim);
console.log(kim);
-Default parameters (es6 추가)
function showMessage(message, from = 'unknow') {
console.log(`${message} by ${from}`);
}
showMessage('Hi')
-Rest parameters
// 배열 형태로 전달됨
function printAll(...args){
for(let i = 0; i < args.length; i++){
console.log(args[i]);
}
// 위와 동일함
for(const arg of args ){
console.log(arg);
}
}
printAll('kim','eun','hwa');
밖에서는 안이보이지 않고 안에서는 밖을 볼 수 있다
지역변수는 지역적이기 때문에 안에서만 접근 가능
함수 안에서 다른 함수를 선언 가능
자식은 부모 가능
자식 안에 있는 걸 부모 상위 안에선 불가능하다
let globaMessage = 'global';
// global variable
function printMessage(){
let message = 'hello';
console.log(message)
// local variable
console.log(globaMessage);
}
// 나쁜 예시
function upgradeUser(user){
if (user.point > 10){
}
}
// 블럭 안에서 로직을 많이 작성하면 가독성이 많이 떨어진다
// 좋은 예시
function upgradeUser(user){
if (user.point <= 10){
return;
}
}
// 필요한 로직은 그 뒤에 작성하는게 좋다