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());