2011-04-29 4 views
1

중첩 된 함수에서 arguments 객체에 문제가 발생했습니다. arguments.length는 부모 함수에서 가져온 것처럼 보이지만 [0] 인수는 중첩 된 함수에서 가져옵니다. 아무도 왜 이런 일이 발생하는지 설명 할 수 없습니까? 부모 foo의 주장을 술집에 전달하는 가장 효과적인 방법은 무엇입니까? (변경하지 않는 한)중첩 함수에서 부모 함수 인수를 전달합니까?

$.fn.foo = function(color1, color2, time){ 
    return this.each(function bar(){ 

     for(var i = 0;i < (arguments.length - 1);i++){ 
      alert(arguments.length); //this is taken from foo function and returns 2 
     alert(arguments[i]); //this is taken from bar 

     } 
    }); 
    }; 
+0

그냥 호기심 때문에, 익명의 함수 대신에 이름이 지정된 함수 인'bar'를 각 함수에 전달할 이유가 있습니까? – Zirak

+2

@Zirak, 아마도 질문을 명확하게하고 그 이름으로 함수를 참조 할 수있을 것입니다. 그 이유는 실제로 좋은 생각입니다! – davin

답변

3

간단한 해결책 : arguments에 대한 로컬 참조를 얻으십시오.

$.fn.foo = function(color1, color2, time){ 
    var args = arguments; // Create a private reference 
    return this.each(function bar(){ 
     alert(args.length); //Use private reference 
    }); 
}; 
4

arguments는 항상 귀하의 경우 bar있는 현재 실행중인 기능의 범위를해야합니다.

읽기 JQuery와는 .eachdocs 함수 "프로토 타입"은 다음과 같다 :

.each(function(index, Element))

그래서 물론 arguments.length 당신이 그 (2) 인수되어 전송 잡으려고 변수의 이름이 있는지 여부 (2)를 반환합니다 다른 이야기지만, 인수 객체는 인수가 2 개 인 경우 함수가 호출 된 경우 길이가 2가됩니다.

관련 문제