//함수 선언식 (★)
function pracA (parameter){
// 컴퓨터에 지시할 사항
}
//함수 표현식
let pracA = function(parameter){
// 컴퓨터에 지시할 사항
}
함수에 대해 재미있는 풀이가 곁들여진 생활코딩 영상
let getSum = (a, b) => a + b;
let getSum= (a, b) => (a + b);
//에러 문법
let getSum = (a, b) => { a + b };
//함수표현식
const adder = function(x) {
return function(y) {
return x + y
}
}
adder(5)(7) // 12
//화살표함수
const adder = x => y => x + y
// 간단한 한줄 표현식을 사용
let getSum = (a, b) => a + b;
getSum(3,5);
> 8
주의사항
- call, apply, bind는 사용할 수 없다.
- 화살표 함수의 실행은 this를 결정짓지 않는다.
const htmlMaker = tag => textContent => `<${tag}>${textContent}</${tag}>`
htmlMaker('div')('code states');
// "<div>code states</div>"
const liMaker = htmlMaker('li')
liMaker('1st item');
//"<li>1st item</li>"
apply(null, [arr1, arr2,...]);
let arr = [ 10, 3, 5, 40 ];
Math.max.apply(null, arr);
> 40
function maxLength(){
let result = [];
for(let i of this){
if (i.length > 4){
result.push(i);
}
}
return result;
}
let animals = [ 'rhinoceros', 'seal', 'otter', 'ostrich', 'rat' ]
maxLength.apply(animals);
> ["rhinoceros", "otter", "ostrich"]
let word = ['banana', 'dog', 'good', 'like', 'I'];
maxLength.apply(word);
> ["banana"]
call(null, arr1, arr2,...);
function maxLength(str){
return str.length > 4
}
let arr = ['banana', 'is', 'good'];
Array.prototype.filter.call(arr, maxLength);
> ["banana"]
fn.bind(null 또는 this값, value1, value2,...);
새로운 bound function(원본 함수에 감싸진 exotic function object)을 실행시킨다.
bound function은 래핑 함수의 실행을 결과로 내놓는다. (바인딩된 값)
실제활용 예
CASE 1 : 이벤트 핸들러
let btn = document.querySelector('#btn')
// 추후 이벤트에 의해 불리게 될 함수에서, this는 {hello: 'world'}가 됩니다.
btn.onclick = handleClick.bind({ hello: 'world'})
function handleClick() {
console.log(this)
}
let target = document.querySelector('#target')
let users = ['김코딩', '박해커', '최초보']
users.forEach(function(user) {
let btn = document.createElement('button')
btn.textContent = user
btn.onclick = handleClick.bind(null, user)
// 굳이 this를 이용하지 않더라도 인자로 넘길 수도 있습니다.
target.appendChild(btn)
});
function handleClick(user) {
console.log(user)
}