JSLint 메시지 : 사용하지 않는 변수


80

JSLint가 이러한 시나리오에서 사용되지 않는 변수 인 "i"에 대해 불평하면 어떻게해야합니까?

var items = "<option selected></option>";
$.each(data, function (i, item) {
    items += "<option value='" + item.Value + "'>" + item.Text + "</option>";
});

(i, item)은 매개 변수의 필수 순서이며 "item"만 사용하고 있습니다.

사용하지 않는 변수를 허용하거나 색인을 사용하기 위해 $ .each를 다시 작성하는 것 외에 다른 해결책이 있습니까?

미리 감사드립니다.

업데이트 : 모든 제안에 감사 드리지만이 코드는 단순히 내가 의미하는 바를 보여주는 예일 뿐이며 일반적인 솔루션이 있다면보고 싶습니다. 감사.


6
이 특정 경우 this= item( api.jquery.com/jQuery.each )이므로 두 매개 변수를 사용할 필요가 없습니다. 그러나이 질문은 아마도 좀 더 일반적인 의미로 대답해야합니다.
그렉

우리가 할 수만 있다면 너무 좋을 것입니다$.each(data, function (, item)
oscaralexander 2014-02-04

많은 사람들이 사용 _하지 않는 매개 변수 를 사용하지만 JSLint 에게 특별히 무시 하라고 말할 방법은 없지만_ 정말 좋을 것입니다.
David J.

답변:


79

시험:

var items = "<option selected></option>";
/*jslint unparam: true*/
$.each(data, function (i, item) {
    items += "<option value='" + item.Value + "'>" + item.Text + "</option>";
});
/*jslint unparam: false*/  // so that you still get warnings from other functions

+1. 이것은 비슷한 상황에서 저에게 효과적이었고 영향을받은 라인 바로 앞뒤에 놓을 수있었습니다. 감사!
Ed Bayiates 2012 년

4
: 당신이 jQuery의 반복자를 사용하여 객체의 배열을 통해 내가 당신에게있는 거 반복하는 사용하지 않을 때문에, 당신은 "이"를 사용할 수 있습니다$.each([{a:0},{a:1},{a:2},{a:3}], function(){ console.log(this.a)})

3
이것이 최선의 방법입니다! / * jslint unparam : 참 * /
Foxinni

1
함수 삭제 :)

2
unparamJSLint에서 더 이상 지원되지 않습니다. 대신 ignore아래 답변에 설명 된 새 키워드를 제공합니다 .
oyenamit

24

http://www.jslint.com/help.html 에서 이것이 새로운 것 같습니다 .

"JSLint는 새로운 예약어를 도입했습니다 : ignore"

따라서 위의 내용은 다음과 같습니다.

$.each(data, function (ignore, item) {

나는 => 무시 ... 너무 쉽습니다. 나머지 코드는 동일하게 유지 될 수 있으며 브라우저는 만족스럽고 JSLint는 만족합니다.


이전 (잘못된) 답변 :

JsLint와 브라우저를 모두 게시하려면 다음을 사용해야합니다.

function (d, i) {
        if (undefined !== win.undefined) {
            undefined(d);
        }
        return (i);
}

undefined가 함수가 아니기 때문에 브라우저가 "undefined (d)"에서 충돌했습니다. 따라서 "undefined! == win.undefined"는 브라우저에있는 경우 해당 줄을 건너 뜁니다.


14
ignore경고를 억제하는 이 새로운 방법은 동일한 함수에 사용되지 않은 매개 변수가 둘 이상있는 경우 작동하지 않습니다.
oyenamit

당신은 (parameter, ignore, ignore1, ignore2, value, ignore3)를 사용할 수 있습니다. 적어도 Mac 용 Webstorm에서는 경고를 억제하는 광고가 작동합니다
Paul N

1

당신은 이것을 할 수 있습니다 :

var items = "<option selected></option>";
$.each(data, function () {
    var item = arguments[1];
    items += "<option value='" + item.Value + "'>" + item.Text + "</option>";
});

...하지만 나에게 물어 보면 더 나쁠 것입니다.


1
@Schroedinger-오, 물론 이죠. 항상 JSLint와의 절충안입니다. 당신은 스스로 결정해야합니다.
nickf

8
하나의 경고를 수정하고 또 다른 "JS Lint : 명명 된 매개 변수 사용"을 발생시킵니다. :)

1

상당히자가 문서화 방식으로 경고를 제거 할 수있는 가능한 방법은 다음과 같이 사용되지 않는 변수를 사용하는 것입니다.

// Utility function in project scope:
function unusedVariables(/* Put all your deliberately unused variables here */) {
    // pass
}

// And then, later:
var items = "<option selected></option>";
$.each(data, function (i, item) {
    unusedVariables(i); //< This is the new and magical line
    items += "<option value='" + item.Value + "'>" + item.Text + "</option>";
});

물론 이제 변수를 사용하지 않음으로 표시하고 여전히 어딘가에서 사용하는 상황에 들어갈 수 있습니다. 또한이 방법은 컨텍스트에 따라 너무 장황 할 수 있습니다.

이 방법은 정확하다는 장점이 있습니다. 사용 범위 /*jslint unparam*/가 너무 넓을 수 있습니다.


4
이것은 JSLint의 "빈 블록"테스트에 실패 할 수 있습니다.
jokeyrhyme 2013-08-04

4
이 대답은 '작동'하지만 사용하지 않는 것이 좋습니다. 나는 "해결책이 문제보다 더 나쁘다"로 파일을 제출합니다.
David J.

1
이 솔루션, @superluminary 및 DavidJames의 나쁜 점에 대한 세부 정보를 추가하면 다른 독자에게 더 도움이 될 것입니다. 이 솔루션을 싫어하는 사람들에게는 문제가 없지만, 그것이 누구에게도 도움이되지 않는다는 코멘트를 추가하는 것은 문제가되지 않습니다. :)
Magnus Hoff

6
Magnus에게 사과드립니다. 댓글이 삭제되었습니다. 이 솔루션이 마음에 들지 않는 이유는 특정 유효성 검사기의 특정 버전을 속여 코드를 전달하기위한 목적으로 만 의미없는 코드를 추가하기 때문입니다. 그것은 해킹이고 코드에 의미를 추가하지 않으며 잘 노화되지 않습니다. 적절한 해결책은 JSLint를 수정하는 것입니다.
superluminary

@superluminary는 :) 정성 들여 주셔서 감사합니다
매그너스 호프

1

void의도적으로 변수를 사용하지 않음을 명시하기 위해 사용 하는 것은 어떻습니까?

$.each(data, function (i, item, any, other, unused, vars) {
  void(i, any, other, unused, vars);
  items += "<option value='" + item.Value + "'>" + item.Text + "</option>";
});

이것은 덮어 쓸 것으로 예상되는 추상 함수에서 유용하지만 서명을 표시하려는 경우 또는 인수를 무시하지만 모의 된 함수의 서명과 일치시키려는 모의에서 유용합니다.


3
무효를 사용하여 JSLint을 통과하지 않는 것
xorcus

void원인 사용 Expected 'undefined' and instead saw 'void'. 사용 undefined(i, any, other, unused, vars);은 JSLint 를 전달합니다.
maheshsenni 2014 년

1

"i"를 "사용하지 않음"으로 이름을 바꿉니다. 여전히 오류가 분명하게 남아 있지만 목록에서 오류를보고 해당 오류를 "확인"했으며 괜찮다는 것을 알고 있습니다.


이것은 나쁜 생각은 아니지만 연속 통합을 수행하고 코드 병합을 허용하기 전에 모든 코드를 lint하려는 경우 경고를 오류로 처리하는 경우 작동하지 않습니다.

1
답변 에서 언급했듯이 사용되지 않는 변수의 이름을 "무시"로 바꾸면 JSLint에 의해 유효성이 검사됩니다. 그래서 그 대신 "사용되지 않는"의 "무시"하면, 모든 설정이 끝난 것입니다 (제한 : 지원 같은 기능 하나만 사용되지 않는 변수)
Emilien


0

함수에 사용되지 않은 매개 변수가 두 개 이상있는 경우 다음과 같이 "ignore"를 사용할 수 있습니다 .

function (ignoreFoo, ignoreBar, baz) {
}

예약어 "ignore"(ignore, ignoreFoo, ignoreBar, ...)로 시작해야합니다.


이것은 PuZZleDucK의 답변 과 실질적으로 동일 합니다. 이미 일부가있을 때 답변을 추가하는 경우, 특히 훨씬 더 오래되고 이미 찬성 된 경우 다른 답변을 반복하지 않는지 확인하거나 차이가있는 경우 다른 답변을 명시 적으로 인용하고 분명히 차이. 감사합니다!
Fabio 말한다 Reinstate Monica

2
다음 코드 (사용되지 않는 변수 3 개)를 사용하면 첫 번째 "ignore"만 JSLint 유효성 검사를 통과하고 마지막 두 매개 변수는 "Unused 'ignoreOne'"및 "Unused 'ignoreTwo'"를 videos.forEach(function (ignore, i, ignoreOne, ignoreTwo)
트리거합니다

'ignoreInterval'이 선언되었지만 그 값은 읽히지 않습니다. 이제 더 이상 오류가 발생합니다. (
noob7
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.