一个难忘而又难以理解的代码

本文探讨了JavaScript中数组遍历的方法及存在的问题,并通过具体示例展示了如何优化遍历过程以找到特定值的第一个索引。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

function each(arr,fn){
for(var i = 0; i < arr.length; i++){
 fn( );
}
}
var max= arr[0];
each(arr,function( ){
if(max < arr[i]){
max = arr[i];
}
});
console.log(max);

上面的出的结果会是  函数中的i没有定义

原因:作用域问题

                                 i  是在function函数里面执行的,
                                    但是function函数里却没有定义i,在函数中找不到i的定义
    就找该函数的父级作用域,该元素的父级作用域就是全局作用域,
    但是在全局作用域中却没有定义i,所以就是undefined

 function each(arr,fn){
        for(var i = 0; i < arr.length; i++){
            fn(i);//2.实参
        }
    }
    var max= arr[0];
    each(arr,function(index){//1.先设置形参,获取数组中得索引值
        if(max < arr[index]){
            max = arr[index];
        }
    });
    console.log(max);

在上面的代码中   若想在函数function中得到数组的索引,那么我们就在函数中给一个参数,来代表数组的索引,而相应的each函数中的fn函数里也应该传入一个实参,即是数组的索引值 i 这样就可以顺利的遍历 并且得到想要的结果


var arr = [66,6,88,66];

//在求数组中的值所对应的参数中 也是如上,可是若是数组中出现两个相同的值时,所对应的索引的却会出现只有最后一个元素的索引,要改变这样的情况就只有如下写

<script>

var arr = [1,2,6,8,6];
function each(arr,fn){
for(var i = 0 ; i < arr.length; i++){
var inde = fn(i);//接收函数的返回值
console.log(inde);//输出函数的返回值 结果undefined undefined 2 undefined 4
}
}
//找数组中对应的值
var index = -1;
each(arr,function(i){
if(arr[i] == 6){//注意:不要只写一个等号,那是赋值符号
index = i;
return index;//这是返回一个函数的值,但是却没有接收
}
});

// console.log(index);若是在这里输出得出的结果只有4

在上面的代码之中  最难理解的就是返回值,当然,这并不是最终的结果


优化后的最终的结果是

<script>
var arr = [26,22,66,88,66];
function each(arr,fn){
for(var i = 0; i < arr.length; i++){
var index = fn(i);//2.实参
if(index == false){
break;
}

}
}
var index = -1;
each(arr,function(i){
if(arr[i] === 66){
index = i;
return false;  //当数组中的值等于66的时候,就停止遍历
}
});
console.log(index);
</script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值