javascript - 为什么 JSHINT 提示这是一个严重的违规行为?

标签 javascript jslint strict jshint

I think this may be a duplicate of Strict Violation using this keyword and revealing module pattern

我有这个代码:

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) 正在提示。它说“严重违规”。对于突出显示的行:

enter image description here

我使用 Function.call() 然后引用实例是否不合适?

这被认为是不好的风格吗?

最佳答案

JSHint 说“可能严格违反”,因为你在某些东西中使用了 this,据它所知,这不是一种方法。

在非严格模式下,调用gotoPage(5) 会将this 绑定(bind)到全局对象(浏览器中的window)。在严格模式下,this 将是 undefined,您会遇到麻烦。

大概,您的意思是使用绑定(bind)的 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);
}

关于javascript - 为什么 JSHINT 提示这是一个严重的违规行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7688765/

相关文章:

javascript - 离开底部后 300px 做一些事情

javascript - 如何制作部分隐藏的div?

javascript - JQuery 延迟一个事件以使用 `click` 事件处理程序检索 DOM 对象

javascript - 使用 "use strict"和可变范围

javascript - jquery 事件触发器不工作

javascript - 在 div 内拖动而不是滚动

javaScript 保留关键字

javascript - 在让 JSLint 开心的同时创建一个 n 大小的数组?

javascript - 与0和JSLint错误的比较

mysql - 选择一列,按另一列分组 - ONLY_FULL_GROUP_BY