함수에 인수의 "임의의"양을 전달하는 다른 방법의 소수있다 : 여기
sum(1)(2)() == 3
의 구현입니다. 아마도 가장 유용한 것은
arguments
개체입니다. 모든 함수의 범위에서 함수에 전달 된 모든 인수를 보유하는 배열과 같은 객체가 있습니다. 이 기능처럼 보이는에도 불구하고
function shout(msg) {
for (var i = 0; i < arguments.length; i++)
console.log(arguments[i]);
}
shout("This", "is", "JavaScript!"); // Logs all three strings, one line at a time
는 하나 개의 인수를 받아, 당신은 당신이 원하는만큼 많은, 그들 모두를 통해 기능 의지주기에 연결할 수 있습니다. 따라서, 귀하의 코드를이 변환 :
function sum(a) {
var total = 0;
for (var i = 0; i < arguments.length; i++)
total = total + arguments[i];
return total;
}
sum(1, 2); // Returns 3
두 가지주의 할 :
- 당신이 인수가 객체에 접근하고 있기 때문에, 당신은 정말하지 "필요"를에 인수 목록의 모든 종류의 작업을 수행 함수 정의 (즉,
sum(a)
에는 a
이 필요하지 않습니다). 일반적으로 함수가 예상하는 바를 표시하는 것이 좋습니다.
- arguments 객체는과 같은 배열 -이지만 실제 배열은 아닙니다. 당신이 물건을 엉망으로 만들고 싶지 않으면 push 나 pop과 같은 배열 함수를 사용하려고하지 마십시오.
특정 sum(1)(2)
구문에 대한 - 그러나 그것이 매우 구체적으로 필요한 경우 - 나는 혼란 스럽습니다. 이론적으로, 이와 같은 임의 체인을 사용하려면 인 객체를 반환하는 함수가 필요합니다.은 JavaScript의 기본 규칙을 위반하는 함수 및 숫자입니다. 나는 그렇게하는 것이 매우 좋은 이유가 없다면 일반적으로 눈살을 찌푸리게되는 내장 된 객체에 대한 극도로 영리한 (그리고 매우 위험한) 편집 작업 없이는 가능하지 않다고 생각합니다.
var add = function(a,b){
return a+b;
};
var sum = function(){
return [].reduce.call(arguments, add);
}
을 그리고 당신은 쓸 수 있습니다 :
이것은 매우 영리하다. 당신의 대답이 암시하는 것처럼 실제 사용에 너무 영리합니다. 그럼에도 불구하고, 그것은 정확하고 매우 생각을 자극합니다. –
매우 인상적인 대답입니다. – bean