카테고리 없음

[TIL] Javascript-7

note-for-development 2024. 1. 16. 23:37

 

1. 코드카타 : 두번의 for을 사용하여 두번 순회하는 경우, 함수의 선언 위치도 중요하다. 

var sum=[]; 을 var answer=[]; 뒤에 선언할 경우 결과값이 두번 반복해서 나오게 된다.

function solution(arr1, arr2) {
var answer = [];
for (i=0; i<arr1.length; i++){
var sum = [];
for (j=0; j<arr1[i].length; j++) {
sum.push(arr1[i][j]+arr2[i][j]);
}
answer.push(sum)
}
return answer;
}

 

2. this binding

this binding을 call을 사용하는 경우. call은 thisArg 또는 global을 결과로 나타내게 되어있다.

this.length에서의 this는 제시된 배열에 해당한다.

thisArg가 존재하면 this가 제시된 배열에 바인딩한다. => this에 다른 값을 담을 수 있다.

따라서 같은 조건의 다른 값을 제시할 수 있다.

 
var mappedArr=[];
Array.prototype.map1 = function (callback, thisArg) {
for (var i= 0; i<this.length; i++){
console.log("=============");
console.log(i)
var mappedvalue = callback.call(thisArg || global, this[i]);
console.log(mappedvalue)
mappedArr[i] = mappedvalue
}
return console.log(mappedArr);
}
 

0
2
=============
1
4
=============


2. self를 이용한 this binding

this를 사용하여 함수를 self를 this 값으로 할당하고, 새로운 객체를 생성하는 것을 배웠다.

self는 return에 있는 함수 바깥에 있음에도 불구하고 영향을 준다.

그 과정에서callback 함수를 이전값을 참고, 변화시킨 후 적용을 시도해보았다.

 
var obj1 = {
name : obj1,
func : function (adv) {
var rename = adv+"부들"
console.log(rename);
var self = this;
return function () {
console.log(self.name+"폭신")
console.log(self.name)
}}}

var obj2 = {name: 'obj3'};
var callback2 = obj1.func.call(obj2);
setTimeout(callback2, 2000)
var callback3 = obj1.func.call(obj2.name = "obj4")
setTimeout(callback3, 2000)
 

결과

undefined부들
undefined부들
obj4폭신
obj4
undefined폭신
undefined

 

적용된 결과 에러는 발생하지 않았고, obj2.name에 값이 잘 할당되었음을 알 수 있다.

또한 undefined부들은 self 이전의 매개변수에 영향을 받지 않았음을 나타낸다.

obj3가 사라지고 obj4만 나타난 것은 변화된 값이 obj4에만 할당되었기 때문이다.

 

만약 call이 없다면 어떻게 될까 적용해보았다.


var obj2 = {name: 'obj3'};
var callback2 = obj1.func(obj2);
setTimeout(callback2, 2000)
 

 

[object Object]부들
undefined폭신
undefined

 

name과는 상관 없이 객체가 모두 들어갔으며, this에도 할당이 되지 않음을 알 수 있다.

결론적으로 this 할당을 좀 더 이해하게 되었으며, call에 대한 개념도 점점 잡혀가는 것 같다.