Javascript 为什么这个循环不能停止?
我尝试使用jquery(jquery-2.1.1)和构造函数来构建html。但当我在for循环中尝试此方法时,循环无法停止。谁能告诉我为什么会这样 这是密码。非常感谢Javascript 为什么这个循环不能停止?,javascript,jquery,Javascript,Jquery,我尝试使用jquery(jquery-2.1.1)和构造函数来构建html。但当我在for循环中尝试此方法时,循环无法停止。谁能告诉我为什么会这样 这是密码。非常感谢 function tag() { this.addClass = function(...theArgs) { for (index in theArgs) { this.$html.addClass(theArgs[index]); } }
function tag() {
this.addClass = function(...theArgs) {
for (index in theArgs) {
this.$html.addClass(theArgs[index]);
}
}
this.setAttr = function(attr, value) {
this.$html.attr(attr, value);
}
this.append = function(...theArgs) {
for (index in theArgs) {
this.$html.append(theArgs[index]);
}
}
this.find = function(value) {
return this.$html.find(value);
}
this.empty = function() {
this.$html.empty();
}
this.remove = function(value) {
this.find(value).remove();
}
this.clone = function() {
return jQuery.extend(true, {}, this);
}
this.show = function() {
return this.$html[0];
}
}
function label(text) {
tag.call(this);
this.$html = $("<label></label>");
this.append(text);
}
for(var index = 0; index < 2; index++) {
var fieldLabel = new label(1);
console.log(index);
}
函数标签(){
this.addClass=函数(…theArgs){
for(在args中索引){
这个.html.addClass(theArgs[index]);
}
}
this.setAttr=函数(attr,value){
这是.html.attr(attr,value);
}
this.append=函数(…theArgs){
for(在args中索引){
这个.html.append(theArgs[index]);
}
}
this.find=函数(值){
返回此值。$html.find(值);
}
this.empty=函数(){
这是。$html.empty();
}
this.remove=函数(值){
this.find(value.remove();
}
this.clone=函数(){
返回jQuery.extend(true,{},this);
}
this.show=函数(){
返回此。$html[0];
}
}
函数标签(文本){
标记。调用(此);
这个。$html=$(“”);
本.附加(文本);
}
对于(var指数=0;指数<2;指数++){
var fieldLabel=新标签(1);
控制台日志(索引);
}
这里的问题是使用索引(不带var
)作为标记
函数中所有循环的运行变量。最后,索引
变量在循环
的外部范围内仍然有效(应在条件=2时停止)
循环开始时,索引
为0
。下一个循环应该是1
。但是当进入内部append
方法时,由于in
的循环,它被重置回0
(传入的参数只是1
,因此扩展表示法生成一个长度为1的数组,而for in
在索引设置为0
时停止)。因此,在第二个循环的末尾,它仍然是0
。这意味着它永远不会大于值1
(该值仅在循环开始时增加)。将始终满足条件<2
,循环的将永远运行
您可以在
中为运行变量使用另一个名称。或者使用var
声明另一个本地范围的索引,如下所示:
this.append = function(...theArgs) {
for (var index in theArgs) {
this.$html.append(theArgs[index]);
}
}
或者更好地按照某人的建议使用for of
。在.append()
中有一个未声明的索引,它们是冲突的:for(args中的索引){
。一定要声明变量:for(args中的var index){
…也在addClass()
。使用像ESLint这样的linter来查找这些常见错误。这将为您节省大量时间……在JS中,在数组中使用for in
不是一个好主意。因为您使用的是。
语法,您必须对ES6的东西没有问题,所以我建议使用for of
循环。为什么?为什么您要包装std jquery功能In这一团糟?我以前也写过类似的功能,但最终视图变得严重臃肿和低效。一年后,我改用模板系统,再也没有回头。它们渲染得更快,视图代码也变得更小。@CharlesZhou如果有帮助,请慢慢接受答案。否则,您将uld删除您的问题,因为它看起来只是一个简单的错误,没有被其他人利用。