Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将函数移出循环_Javascript - Fatal编程技术网

Javascript 如何将函数移出循环

Javascript 如何将函数移出循环,javascript,Javascript,JSHint大声疾呼应该在循环之外声明函数,我只是不知道该怎么做?特定部分:self.onchange=function(){…} 以下是循环: for ( var j = 0; j < checkz.length; j++ ) { var self = checkz[j]; self.onchange = function () { for ( var z = 0; z < psswrd.length; z++ ) { pss

JSHint大声疾呼应该在循环之外声明函数,我只是不知道该怎么做?特定部分:self.onchange=function(){…}

以下是循环:

for ( var j = 0; j < checkz.length; j++ ) {
    var self = checkz[j];
    self.onchange = function () {
        for ( var z = 0; z < psswrd.length; z++ ) {
            psswrd[z].type = self.checked ? 'text' : 'password';
        }
    };
}
for(var j=0;j

当我将它移到外部并分配它时,函数会随着“self”变得未定义而中断。非常感谢您的建议。

在这种情况下,您只需要一个功能:

for ( var j = 0; j < checkz.length; j++ ) {
    var self = checkz[j];
    self.onchange = changeFunction;
    // Or replace the above two lines with:
    // checkz[j].onchange = changeFunction;
    // ...if you don't need `self` for anything else.
}

function changeFunction() {
    for ( var z = 0; z < psswrd.length; z++ ) {
        psswrd[z].type = this.checked ? 'text' : 'password';
        //               ^^^^--- note this changed from `self` to `this`
    }
}
这样,我们分配给
onchange
的函数将关闭
buildChangeFunction
的参数,而不是
j
,并且该参数不会更改


但是,这里您不需要这样做,上面的第一个解决方案就是您所需要的。

您想实现什么?@NetaMeta在我使用Grunt.js时通过JSHint验证除了在外部声明函数外,此代码还存在缺陷。可以在中找到更多细节和建议。这一更改肯定非常重要,因为它修复了原始版本中的错误。
for ( var j = 0; j < checkz.length; j++ ) {
    var self = checkz[j];
    self.onchange = buildChangeFunction(j);
}

function buildChangeFunction(jarg) {
    return function() {
        // Use jarg in here...
    };
}