JS - Function 호출

JD·2021년 9월 30일
0

function 호출 유형


// 함수 표현식 방법으로 함수작성
let sum = function(a,b,c){
	return a+b+c;
}

var s;

// 일반적인 방법으로 함수호출
s = sum(1,2,3);
console.log(s);

// appaly() 함수를 이용한 sum() 함수 호출
// apply(thisArg [,argsArray]): thisArg:함수를 호출할때 제공될 this,인수를 지정하는 배열 유사객체
s = sum.apply(null,[1,2,3]);
console.log(s);

//call() 함수를 이용한 sum() 함수 호출
//call(thisArg [,arg1,arg2 ...]): thisArg:함수를 호출할때 제공될 this
		// arg1,arg2: 함수에 전달할 인수 값
		// apply() 와 차이점은 함수에 전할 인수가 배열이며
		// call() 은 인수 리스트를 받는다
s = sum.call(null,1,2,3);
console.log(s);

//5,6,2,3,7의 최대값
s = Math.max(5,6,2,3,7);
console.log(s);

//5,6,2,3,7의 최대값 배열로 할시  NaN 출력
s = Math.max([5,6,2,3,7]);
console.log(s);

apply()예시

//apply 사용 예시
// 7
s = Math.max.apply(null,[5,6,2,3,7]);
console.log(s); 

s = Math.min.apply(null,[5,6,2,3,7]);
console.log(s); 

call()예시

var obj = {
		name:'김자바',
		sayName:function(){
			console.log('저는'+this.name+'입니다');
		}
};

var obj2 = {
		name:'스프링'
};

obj.sayName();// sayName() 에서의 this는 obj객체

obj.sayName.call(obj2);
	// this가 가리키는 것을 obj에서 obj2로 변경
	//sayName()은 obj 메소드인데 obj2 메소드인것처럼 사용

obj.sayName.call(null);// 이름이 안나옴	
obj.sayName.call(obj);// 김자바	

bind 예시

var obj = {
		name:'김자바',
		sayName:function(){
			console.log('저는'+this.name+'입니다');
		}
};

var obj2 = {
		name:'스프링'
};

var fn = obj.sayName.bind(obj2);//함수를 호출하지 않고 this의 obj를 obj2로 변경
fn();// 저는 스프링 입니다

종합 예시

/* 
function sub() {

	for(var i=0; i<arguments.length; i++){
		console.log(arguments[i]);
	}	
}
sub(1,'자바',true); 
*/

/* 
function sub() {
	console.log(arguments.join());
}
 */
 
//sub(1,'자바',true);// 에러
//arguments는 배열과 유사하지만 배열은 아니며 join 메소가 없음


function sub() {
	console.log(Array.prototype.join.call(arguments));
}

sub(1,'자바',true);

var a1 = [10.20,30];
var a2 = ['a','b','c'];

// a1 배열에 a2 배열의 내용을 뒤에 추가
a1.push.apply(a1,a2);
console.log(a1.join());

0개의 댓글