Javascript 如何将函数移出循环
JSHint大声疾呼应该在循环之外声明函数,我只是不知道该怎么做?特定部分:self.onchange=function(){…} 以下是循环: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
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...
};
}