为什么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 )。 严格的模式下, thisundefined ,你会遇到麻烦。

大概,你的意思是调用这个函数绑定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不会发出警告。