2011-03-14 3 views
0

함수의 arguments 속성을 사용하는 올바른 방법은 무엇입니까? 이것은 내가 현재 그것을 사용하고 방법입니다,하지만 난 그것을 제대로 사용하지 않는 확신 해요 :JavaScript에서 arguments 속성을 가장 잘 사용합니까?

첫째, 나는 내 매개 변수를 정의 :

parameters = {}; 
parameters.ID = $tr.data('ID'); 
parameters.Name = 'Name goes here'; 
parameters.td = $td; 
UpdateName(parameters); 

그리고 기능에

:

var UpdateName = function(){ 
    var local = {}; 
    local.ID = arguments[0].ID; 
    local.Name = arguments[0].Name; 
    local.td = arguments[0].td; 

    local.jqXHR = $.ajax('Remote/Ajax.cfc', { 
     data: { 
      method:'UpdateName' 
      ,returnformat:'json' 
      ,ID:local.ID 
      ,Name:local.Name 
     } 
    }); 
    local.jqXHR.success(function(result){ 
     if (result.MSG == '') { 
      local.td.text(local.Name).addClass('success'); 
     } else { 
      local.td.addClass('err'); 
     }; 
    }); 
    local.jqXHR.error(function(result){ 
     local.td.addClass('err'); 
    }); 
} 
+0

아약스 호출이 매우 빨리 완료되면 성공 및 오류 함수가 정의되지 않을 수 있습니다. '$ .ajax'에 전달 된 설정 객체의 일부로 정의하는 것이 더 좋습니다. –

+0

이런 식으로 함수를 호출 한 이유는 무엇입니까? –

+0

JavaScript 구문을 이해하려고합니다. –

답변

1

JavaScript functions은 명명 된 인수를 사용할 수 있습니다. 당신이 jqXHR에 대한 참조를 유지할 필요가 없도록 당신이 그것으로 아무것도하지 않기 때문에 더 이상 코드를 수정

var UpdateName = function(local) { 
    $.ajax('Remote/Ajax.cfc', { 
     data: { 
      method:'UpdateName', 
      returnformat:'json', 
      ID:local.ID, 
      Name:local.Name, 
      success: function(result) { 
       if (result.MSG == '') { 
        local.td.text(local.Name).addClass('success'); 
       } else { 
        local.td.addClass('err'); 
       } 
      }, 
      error: function(result) { 
       local.td.addClass('err'); 
      } 
     } 
    }); 
} 

다음과 같이 귀하의 경우

,이 코드를 단순화 할 수있다 어쨌든. 또한 선행 쉼표를 각 행의 끝으로 옮겼지만 그저 기본 설정 일뿐입니다.

+0

내 코드를 정리해 주셔서 감사합니다. SQL Server 때문에 쉼표를 넣는 습관이 들었지만 js 코드에 관해서는 지금부터 습관을 바꿀 것입니다. –

+0

필자가 익숙한 다른 언어와 비슷하기 때문에 실제로는 functon (local) 대신 function (arguments)을 사용하고 싶습니다. 그러나 'arguments'라는 단어는 사용할 수없는 키워드입니다 . –

+2

정말로 원한다면 기술적으로'function (arguments)'을 사용할 수 있지만 추천하지는 않습니다. 특별한 목적이 있지만'arguments '는 [예약어] (https://developer.mozilla.org/en/JavaScript/Reference/Reserved_Words)로 보이지 않으므로 사용자가 볼 수있는대로 다시 정의 할 수 있습니다 적당한. [http://jsfiddle.net/yxWZS/](http://jsfiddle.net/yxWZS /)를 예로들 수 있습니다. –

3

기술적으로는 올바르게 사용하고 있지만 실제 코드는 보이지 않습니다. arguments 변수에는 함수에 전달 된 인수와 같은 배열 형식의 개체가 들어 있습니다. 예 : 당신의 예에서

function test() { 
    alert(arguments[0]); 
    alert(arguments[1]); 
} 
test("Hello", 123); // alerts Hello and 123 

, 대신에 객체, 당신은 인수로 속성을 전달할 수 arguments에서 그들을 검색 할 수 있습니다.

5

arguments 개체는 임의의/알 수없는 인수를 허용하는 함수에 가장 유용합니다.

function list(type) { 
    var result = "<" + type + "l>"; 

    // iterate through non-type arguments 
    for (var i = 1; i < arguments.length; i++) 
    result += "<li>" + arguments[i] + "</li>"; 

    result += "</" + type + "l>"; // end list 

    return result; 
} 

...이처럼 사용할 수 있습니다 : :이 MDC는 길이의 HTML 목록을 작성하기위한 this example을 제공

var listHTML = list("u", "One", "Two", "Three"); 
// listHTML is "<ul><li>One</li><li>Two</li><li>Three</li></ul>" 

때문에 arguments의, 우리가 list에 항목의 수를 전달할 수 있으며, 그냥 작동합니다. (이 경우에도 알려진 매개 변수, type는, 이름과 arguments의 반복이 두 번째 요소에서 시작 것을 알 수 있습니다.)

된 매개 변수의 목록은 잘 정의 된, 그래서 단지의 매개 변수의 이름을하지 않을 이유가 없다

함수 선언. arguments을 그대로 사용하는 것은 불필요하며 더 읽기가 어렵습니다.

관련 문제