이 키워드를 사용하고 모듈 패턴을 드러내는 Strict Violation 의 중복이라고 생각합니다.
이 코드가 있습니다.
function gotoPage(s){
if(s<=this.d&&s>0){this.g=s; this.page((s-1)*this.p.size);}
}
function pageChange(event, sorter) {
var dd = event.currentTarget;
gotoPage.call(sorter, dd[dd.selectedIndex].value);
}
그리고 JSHINT (JSLINT)가 불평하고 있습니다. “엄격한 위반”이라고되어 있습니다. 강조 표시된 라인 :

Function.call()인스턴스를 사용한 다음 참조하는 것이 부적절합니까?
이것은 나쁜 스타일로 간주됩니까?
답변
JSHint는 “엄격한 위반 가능성”이라고 말합니다. 왜냐하면 여러분이 this알 수있는 한 메서드가 아닌 것을 내부에서 사용하고 있기 때문 입니다.
엄격하지 않은 모드에서 호출 gotoPage(5)은 브라우저에서 this전역 개체에 바인딩 됩니다 window. 엄격 모드에서, this것 undefined, 당신은 곤경에 얻을 것입니다.
아마도 바운드 this컨텍스트 (예 : gotoPage.bind(myObj)(5)또는)를 사용 하여이 함수를 호출하는 것을 의미합니다 gotoPage.call(myObj, 5). 그렇다면 오류를 생성하지 않으므로 JSHint를 무시할 수 있습니다. 그러나 this분명히 메소드가 아닌 내부를 사용 하는 것은 매우 혼란 스럽기 때문에 코드를 읽는 사람에게는 코드가 명확하지 않다는 것을 알려줍니다 . 단순히 개체를 매개 변수로 전달하는 것이 좋습니다.
function gotoPage(sorter, s) {
if (s <= sorter.d && s > 0) {
sorter.g = s;
sorter.page((s - 1) * sorter.p.size);
}
}
function pageChange(event, sorter) {
var dd = event.currentTarget;
gotoPage(sorter, dd[dd.selectedIndex].value);
}
답변
대문자로 시작하지 않는 함수에 대해이 메시지를 받았습니다.
"use strict";
// ---> strict violation
function something() {
this.test = "";
}
// ---> just fine (note the capital S in Something)
function Something() {
this.test = "";
}
답변
표준 함수 선언을 사용하는 대신 함수를 변수로 선언하면 jshint는이를 엄격한 위반으로 표시하지 않습니다. 따라서 다음을 수행 할 수 있습니다.
var gotoPage = function (s){
if(s<=this.d&&s>0){this.g=s; this.page((s-1)*this.p.size);}
};
var pageChange = function (event, sorter) {
var dd = event.currentTarget;
gotoPage.call(sorter, dd[dd.selectedIndex].value);
};
답변
메서드를 구현하려는 경우 대신 프로토 타입에 할당 할 수 있습니다.
ExampleClassName.protytpe.gotoPage = function gotoPage(s){
// code using this
};
JSHint는 함수가 할당 될 때 경고하지 않습니다.
답변
