Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- VAR
- FOR
- htmlFor
- 학습법 #집중력
- Let
- Openlayers
- Append
- input
- boolean
- createtextnode
- createElement
- const
- appendChild
Archives
- Today
- Total
Atomic Habits
callback / function / thisArg : example 본문
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach
다음 코드는 배열의 각 요소에 대해 한 줄을 기록합니다:
function logArrayElements(element, index, array) {
console.log('a[' + index + '] = ' + element);
}
// 인덱스 2는 배열의 그 위치에 항목이 없기에
// 건너뜀을 주의하세요.
[2, 5, , 9].forEach(logArrayElements);
// 기록:
// a[0] = 2
// a[1] = 5
// a[3] = 9
thisArg 사용
다음 예제는 배열의 각 항목에서 객체의 속성을 갱신합니다:
function Counter() {
this.sum = 0
this.count = 0
}
Counter.prototype.add = function(array) {
array.forEach(function(entry) {
this.sum += entry
++this.count
}, this)
// ^---- 주의
}
const obj = new Counter()
obj.add([2, 5, 9])
obj.count
// 3
obj.sum
// 16
thisArg 매개변수(this)를 forEach()에 제공했기에, callback은 전달받은 this의 값을 자신의 this 값으로 사용할 수 있습니다.
JavaScript's forEach documentation states that the .forEach syntax is:
arr.forEach(callback[, thisArg])
What is the usage of thisArg?
The thisArg can be provided to change the inner this of the callback function. See below.
If you were confused by the fact, that thisArg does nothing when using an arrow function:
var myObject = { name: 'myObject' };
[1,2].forEach(item => {
console.log(item); // 1, 2
console.log(this === myObject, this); // false Window {}
}, myObject)
It's because
arrow functions cannot be bound
Context binding with normal function.
var myObject = { name: 'myObject' };
[1,2].forEach(function(item){
console.log(item); // 1, 2
console.log(this === myObject, this); // true {name: "myObject"}
}, myObject)
If you don't specify myObject at this point, the this inside would point to Window as with the arrow function.
I think these tests will make whole thing clear just test in your browser console
arr=[0];
arr.forEach(function(item) {
console.log(this === window); //true
console.log(this === arr); //false
});
arr.forEach(function(item) {
console.log(this === window); //true
console.log(this === arr); //false
},this);
arr.forEach(function(item) {
console.log(this === window); //false
console.log(this === arr); //true
},arr);
arr.forEach(function(item) {
console.log(this === window); //false
console.log(this === arr); //false
},0);
'IT > JavaScript-JQuery' 카테고리의 다른 글
setTimeout과 setInterval을 이용한 호출 스케줄링 (0) | 2022.06.18 |
---|---|
IE11을 이용한 JavaScript 디버깅 (0) | 2022.06.17 |
[Javascript] append vs appendChild 차이점 (0) | 2022.06.06 |
[JavaScript] 깊은 복사, 얕은 복사 - 재귀함수 (0) | 2022.06.06 |
for / for-in / forEach / for-of 무엇으로 자바스크립트 리스트를 돌아야 하나 (0) | 2022.06.01 |
Comments