解决可能的严格违规(并帮助蝙蝠侠拯救哥谭)

Resolve possible strict violation (and help Batman save Gotham)

我有以下(简化的)Batman.js 文件:

(function(){
  "use strict";

  window.Batman = function(){
    // Global references
    this.version = "1.0.1";
  };

  Batman.prototype.saveGotham = function(params) {
    var _ = this; // Works fine
    destroyGotham.call(_, params);
  };

  // Private
  function destroyGotham(params){
    var _ = this; // <!-- "possible strict violation"
  }

}());

JSHint 抱怨指定行的 possible strict violation。如何在不删除 "use strict" 的情况下解决这个问题?

P.S: 麻烦var _ = this引用Batman实例

在严格模式下作为 this 传递给函数的值不会强制成为对象。
对于普通函数,this 始终是一个对象,如果使用未定义或 null this 调用,则它是全局对象,换句话说,this 通常是 window默认为非严格模式。

不仅自动装箱会带来性能成本,而且在浏览器中公开全局对象也是一种安全隐患,因为全局对象提供对 "secure" JavaScript 环境必须限制的功能的访问。
因此对于严格模式的函数,指定的 this 不会被装箱到对象中,如果未指定,则 this 默认为未定义。

这意味着以这种方式使用this,只需将其设置为一个变量

var _ = this;

在大多数情况下会导致 this 未定义,这就是为什么 jshint 说这是 "possible" 违规,如果你没有' 用 call 调用它并提供一个 this-value。

忽略jshint,你做的很好。