为什么JSHINT抱怨这是一个严格的违规行为?
我认为这可能是严重违规使用这个关键字和揭示模块模式的副本
我有这个代码:
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)会将其绑定到全局对象(浏览器中的window )。 严格的模式下, this是undefined ,你会遇到麻烦。 
 大概,你的意思是调用这个函数绑定this上下文,例如gotoPage.bind(myObj)(5)或gotoPage.call(myObj, 5) 。 如果是这样,你可以忽略JSHint,因为你不会产生任何错误。 但是,它告诉你,你的代码对于任何人来说都是不清楚的,因为在一些不明显的方法中使用this代码是相当混乱的。 将对象作为parameter passing会更好: 
 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 = ""; } 
如果将函数声明为variables而不是使用标准函数声明,那么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不会发出警告。