Jshint | 通过默认设置| 函数的声明和“本”(Jshint | Passing def

2019-10-17 03:24发布

for ( element = 0; element < this.tag_array.length; element++ ) {
    document.getElementById( this.tag_array[element] ).addEventListener(
    "click", function(){ /* constructor function here */ } );  // jshint.com error #1
}

此代码将导致jshint.com错误BC它不希望看到在一个循环中声明的函数。

但是,如果我通过一个简单的函数引用然后我不能出来再次突破jshint解压出来的“本”。

for ( element = 0; element < this.tag_array.length; element++ ) {
    document.getElementById( this.tag_array[element] ).addEventListener(
    "click", vFlipBP );
}

现在我已经当我使用“这”在vFlipBP,我得到BC预计“这”在一个构造函数一起使用的错误。

function vFlipBP(){ var foo = this ; } // jshint error #2

正因为如此,我觉得不可能使jsthint.com在这个特殊的功能快乐。

没关系关闭jshint.com选项。

是否有可能编写可以通过jshint.com默认设置代码。

我只是想了解背后为什么它使得这些警告/错误的推理。

我不担心错误挂了(这是可选的我只能把它关掉)......我只是想知道是否可以通过默认的...有我错过了一个角度。

Answer 1:

既然你似乎并不关心使几个相同的功能,似乎JSHint不介意这...

var element;
for ( element = 0; element < 10; element++ ) {
    document.getElementById( this.tag_array[element] ).addEventListener(
    "click", make_func() );
}

function make_func() {
  "use strict";
  return function(){ var foo = this; alert(foo); };
}

它似乎也接受,如果你不使用的函数声明语法...

var element;
var the_func = function(){ 
  "use strict";
  var foo = this; 
  alert(foo); 
};


for ( element = 0; element < 10; element++ ) {
    document.getElementById( this.tag_array[element] ).addEventListener(
    "click", the_func );
}


Answer 2:

它看起来像你想使用this作为回调的背景之下,jshint抱怨的功能,是不是一个构造函数使用此。

因此,假设这是你有码

function showId() {
   alert(this.id); // jshint warning here
}
for ( element = 0; element < this.tag_array.length; element++ ) {
    document.getElementById( this.tag_array[element] ).addEventListener(
    "click", showId ); 
}

你不得不重写你的功能,所以它不使用this ,这里是一个可能的方式

function createHandler(obj) {
    return function(e) {
        alert(obj.id);
    }
}

for ( element = 0; element < this.tag_array.length; element++ ) {
    var nodeId = this.tag_array[element];
    var node =  document.getElementById(nodeId);
    node.addEventListener("click", createHandler(node)); 
}

你能不能告诉jshint这个特定功能是安全的使用this ? 随着validthis这个选项? 在谷歌关闭编译器,你可以通过使用这样做@this指定你知道this将是该函数(和避免该警告) https://developers.google.com/closure/compiler/docs/js-for -compiler



文章来源: Jshint | Passing default settings | Function declarations and 'this'