✔️ [인자, 인수]
✔️ [함수의 다양한 형태]
const noNameFun = function(){
console.log('this is no name function')
}
//함수 바인딩 bind
let user = { firstName: 'LEE' }
function fun(){
console.log(this.firstName)
}
let funUser = fun.bind(user)
funUser() //LEE
const app = (function(params){
//private code
return {
//public property or method
}
}(args))
무한히 수행되기 때문에 로직 중간에 탈출조건
을 만들어야 한다. function factorial(n){
if(n <= 1) return 1
return n * factorial(n - 1)
}
const facRun = factorial(5)
console.log('facRun: ', facRun);
fucntion outer(){
let x = 1
function inner(){
let y = 2
console.log(`${x}+${y} = x + y`
}
inner()
}
outer()
//1 + 2 = 3
function sayMyName(name){
console.log('this is', name)
}
function runFun(some){
some('kim')
}
runFun(sayMyName)
setInterval(실행할함수, 주기)
clearInterval(정지시킬serInterval)
//요소 동적 추가
const pauseBtn = document.createElement('button')
pauseBtn.setAttribute('class', 'pauseBtn')
const pauseBtnText = document.createTextNode('정지버튼')
pauseBtn.appendChild(pauseBtnText)
document.body.appendChild(pauseBtn)
function pauseFun(){
let sum = 0
let oneMsFun = setInterval(() => {
console.log(sum += 10)
}, 1000)
pauseBtn.onclick = () => {
clearInterval(oneMsFun)
}
}
pauseFun()
왜 콜백이라고 불리는가? / 추가적으로 어떻게 사용하는건가?
콜백이라는 것은 함수의 인수로 사용되는 간단한 개념이지만 특정한 실행위치를 보장해주는 용도로도 많이 활용된다.
function timeout(cb) {setTimeout(() => {
console.log('heropy@')
cb() //콜백
}, 3000)
};
timeout(()=>{
console.log('done');
})
함수가 실행될 때마다 그 로직을 동작시켜야 하기에 자원이 계속 들어가게 된다.
변수에 함수실행의 내용을 담아서 사용하게 되면 그 결과의 값만 사용할 수 있기 때문에 훨씬 더 효율적으로 사용 할 수 있다.
함수가 호출된 특정한 결과를 반복적으로 사용하느냐 안하느냐의 차이
함수가 호출되는 횟수를 최대한 줄여서 사용해본다.
function sum(x, y){
return x + y
}
const b = sum(4, 12)
console.log(sum(1,3))
console.log(b)
반복적으로 사용될 때 : 함수에 넣어서 사용
단일로만 사용: 호출되는 공간에서 직접적으로 함수를 사용한다.
ex) console.log(sum(1,3))
( ) => { } vs function( ){ }
✔️[값이 하나만 있을 때]
const add = x => x + 1;
const add2 => function(){}
✔️[중요한 특징]
✔️[기존 함수의 기능과의 차이점]
const doubleArrow = (x) => return x * 2
const doubleArrow = (x, y) => x * 2
const doubleArrow = x => x * 2
변수x의 스코프는 y이다. => 변수x는 y영역에서 참조할 수 있다.
🔹[스코프체인]
js에서 함수는 중첩으로 정의할 수 있다. 그때문에 선언된 변수들은 함수 범위 내에서 동작하는데 변수가 사용되는 범위에 정의되지 않을경우 js엔진은 상위 스코프 방향으로 선언된 변수를 검색한다.
🔹[렉시컬 스코프]
동적 스코프
와 렉시컬(정적) 스코프
로 나뉘게된다.호출한 시점에 스코프를 결정하는 방식을 동적 스코프(dynamic scope)라 하고,
정의한 시점에 스코프를 결정하는 방식을 정적 스코프(static scope) 또는 렉시컬 스코프(lexical scope)라 한다.
let x = 1
function foo() {
let x = 10
bar()
}
function bar() {
console.log(x + 1)
}
foo() //2
bar() //2