这是我写的代码
function arrayContains(value,array){
var result = false;
for(i=0;i<array.length;i++){
if(array[i]==value){
result = true;
}
}
return result;
}
function someFunction(array2){
var arr = [];
for(i = 0 ; i<array2.length; i++){
var val = array2[i];
if(!arrayContains(val,arr)){
arr.push(val);
}
}
console.log(arr);
}
但是,运行此代码会冻结浏览器。这段代码有什么问题?
答案 0 :(得分:4)
您忘了var
两次:
for(i=0;i<array.length;i++){
...
for(i = 0 ; i<array2.length; i++){
因此,所有循环都使用相同的全局变量i
。当您致电arrayContains
时,您会重置someFunction
中使用的计数器,这会导致无限循环。
小心在所有循环中添加var
声明:
for(var i=0; i<array.length; i++){
旁注:你不必在arrayContains
中迭代整个数组,你可以做到
function arrayContains(value, array){
for(var i=0; i<array.length; i++){
if(array[i]==value) return true;
}
return false;
}