我不确定这些功能是否完全相同:
时:
for (i=0, l=this.current_columns.length; i<l; i++) {
if ( this.current_columns[i].text === row[0] ) {
this.current_columns.splice(i, 1);
EV.publish('edit_layout.current_columns', {data: [this.current_columns]})
break;
}
}
等于:
for (i=0; i<this.current_columns.length; i++) {
if ( this.current_columns[i].text === row[0] ) {
this.current_columns.splice(i, 1);
EV.publish('edit_layout.current_columns', {data: [this.current_columns]})
break;
}
}
最终的结果?
答案 0 :(得分:3)
他们实际上做了同样的事情,但可能需要一些解释:
循环本身的不同之处在于数组的长度存储在第一个版本的变量中。
将长度存储在变量中意味着循环将运行到数组的原始长度,如果数组在循环内发生变化,那将是一个问题。
阵列恰好在循环中发生变化,但是之后你也有break;
,这不是问题。循环结束,因此变量中的长度不再正确并不重要。
答案 1 :(得分:2)
这部分:
for (i=0, l=this.current_columns.length; i<l; i++) {
第一部分:i=0, l=this.current_columns.length
执行一次,而i<l
在每次迭代时执行。
i
和l
结果(如果删除元素l = l - 1
和i = i - 1
)