const a = () => console.log('arrow func')
const a = _ => consol.log('arrow func') ( _ or $ 는 사용 가능 )
const a = x => console.log(x)
const a = (x, y) => console.log(x, y)
const a = (x, y) => {
console.log(x, y)
}
// 객체를 즉시 반환하는경우 ()로 감싸줘야 함
const obj = (x) => ({ x });
const f = function(a) {
return function(b) {
return a * b
}
}
const f1 = a => b => a * b
arrow function은 함수 스코프를 생성함. 단, 실행 컨텍스트 생성 시 this 바인딩 x
const obj = {
a () {
console.log(this) // {a: ƒ}
const b = () =>{
console.log(this) // {a: ƒ}
}
b()
},
}
obj.a()
forEach의 callback func의 this는 window를 가르키기 때문에 여기서의 total은
window.total이다. (전역 변수 total)
const obj = {
grades : [80, 90, 100],
getTotal : function () {
this.total = 0 // this: obj
this.grades.forEach(function(v) {
this.total += v // this : window
})
}
// 바인딩을 해주는 경우
// callback func에서 this를 바인딩해주면 total은 obj.total를 가리킨다.
getTotal : function () {
this.total = 0 // this: obj
this.grades.forEach(function(v) {
this.total += v // this: obj
}, this) //
}
}
obj.getTotal()
arrow Func에서는 this를 바인딩하지 않기 때문에 forEach의 callback Func의 this는 obj를 가르킨다.
const obj = {
grades : [80, 90, 100],
getTotal : function () {
this.total = 0 // this: obj
this.grades.forEach((v) => {
this.total += v // this: obj
})
}
}
obj.getTotal()
const a = () => console.log(this)
a() // Window
a.call({}) // Window,
const b = function() {
console.log(this)
}
b() // Window
b({}) // {}