2014-11-29 5 views
4

나는 다음과 같은 기능JavaScript에서 "arguments"라는 인수를 사용해도 괜찮습니까?

function call(instance, func, arguments) { 
    return { 
    call: { 
     instance: instance, 
     func: func, 
     arguments: arguments 
    } 
    } 
} 

확인 이름 arguments 사용할 수 있나요을 노출하는 라이브러리를 쓰고 있어요? 정말 가장 좋은 이름이지만 builtin 변수와 충돌하고 싶지는 않습니다. 노드에서 작동합니다. 이 기능은 모든 브라우저 및 JavaScript 환경에서 사용할 수 있습니까?

편집 : 노드에을 예상대로 위의 함수 이 작동 않습니다

참고. 내가 궁금해하는 점은 이것이 모든 곳에서 효과가 있을지의 여부입니다.

기술적 이유가없는 한 이름을 바꾸지 않을 것입니다. 반환 된 객체가 JSON으로 직렬화되고 여러 언어에서 사용되기 때문에이 외부 지향적 인 함수와 문서에서이 매개 변수 이름을 반영하고 싶습니다.

답변

6

"넉넉한 모드"에서는 arguments이라는 이름을 사용하는 것이 좋지만 권장하지는 않습니다.

작성자가 코드 품질을 신경 쓰는 경우 모든 새 코드가 사용해야하는 엄격 모드에서는 사용할 수 없습니다.

function a(arguments) { 
    console.log(arguments); 
} 
a(1); 
// Prints "1" 

(function() { 
    'use strict'; 
    function a(arguments) { 
     console.log(arguments); 
    } 
    a(1); 
}()); 
// Uncaught SyntaxError: Unexpected eval or arguments in strict mode 

이것은 "개체"변수의 이름과 유사합니다. 어쩌면 어떤 불명확 한 맥락에서는 그 이름을 사용하는 것이 합리적 일 수도 있지만 그렇게함으로써 당신은 글로벌 Object 객체에 접근 할 수 없게되고 그것에 대한 유용한 메소드는 Object.keys과 같습니다. 비슷하게,이 잘못된 명명 결정을 내림으로써 더 이상 arguments 객체를 조작 할 수 없으며 이는 JS에서 가변적입니다.

코드의 유지 관리 가능성을 높이려면 이와 같은 시한 폭탄을 만드는 것을 피하는 것이 가장 좋습니다. 엄격한 모드에서는 허용되지 않는 데는 좋은 이유가 있습니다. 일반적으로 arguments을 사용하고자하는 사람에게는 불행을 초래할 수 있습니다.

+0

엄격 모드가 중요하므로 기술적으로 이름을 재사용 할 수 없게됩니다. 이 예제에 감사드립니다. – Joe

4

그 것처럼 보입니다. arguments은 함수의 모든 인수를 가져 오는 빠른 배열 방식입니다. 이에 대한 설명은 this을 참조하십시오.

아마도 parameters을 사용할 수 있습니까?

편집 :

function sayHelloTo(objectToSayHiTo){ 
 
    alert("Hello "+arguments[0]+"!"); 
 
} 
 

 
sayHelloTo("world");

편집 # 2 : 분명히,이 영향을받지 않습니다

이 변수 작품, 내가 쓴 방법을 보려면 :

function sendGreetings(name, arguments){ 
 
    alert("I'm "+name+"!"); 
 
    for(var count=0;count<arguments.length;count++){ 
 
     alert("Hello "+arguments[count]+"!"); 
 
    } 
 
} 
 

 
sendGreetings("kittycat3141", ["world", "StackExchange", "Joe"]);

그러나, 나는 아직 모든 브라우저를 시도하지 않았습니다.

수정 # 3 5 개의 주요 브라우저 (IE, Chrome, Safari, Firefox 및 Opera)를 사용해 보았으며 위 코드가 제대로 작동했습니다. 그러나, iCobot이 의견에서 말했듯이 나중에 코드를 읽는 사용자와 혼란을 줄여 줄 수 있으므로 내장 된 이름을 사용하지 않는 것이 가장 좋습니다.

+2

좋은 조언이지만 질문에 대답하지 않습니다. –

+0

@KarolyHorvath 왜 안되니? – FlyingPiMonster

+0

"모든 브라우저 및 JavaScript 환경에서 작동합니까?" – iCobot