return如何终止each迭代

问题:我自定义了一个each迭代函数,想比较两个数组是否一致。如果遍历过程中发现不一样,则退出循环。如何退出循环现在有些疑问。

代码:


/* 

   自己实现迭代器

*/

const each = function(arr,callback){

    for(var i=0;i<arr.length;i++){

        callback.call(arr[i],i,arr[i]);

    }

}



/* 

    比较两数组是否一样  -----方式一

*/

const compare = function(arr1,arr2){

    if(arr1.length !== arr2.length){

        console.log("两数组长度不一致");

        return;

    }

    each(arr1,function(index,item){

        if(item !== arr2[index]){

            console.log("两数组不一致");

            return;

        }

    })

}



/* 

    比较两数组是否一样-----方式二

*/

const compare = function(arr1,arr2){

    if(arr1.length !== arr2.length){

        console.log("两数组长度不一致");

        return;

    }

    var breaked = false;

    each(arr1,function(index,item){

        if(breaked){

            return;

        }

        if(item !== arr2[index]){

            console.log("两数组不一致");

            breaked = true;

        }

    })

}

疑问:使用方式一,如果不相等,循环还会继续执行,不会终止。但是使用方式二可以终止循环。请问两方式的区别在哪里。


当年话下
浏览 666回答 5
5回答

幕布斯1329279

问题的根源在你实现的each中,callback执行的结果在each中看没有任何意义,一直在for循环中。另外,你的两种方式实际上效果是一样的,不信你在if(breaked){    return;}加上console.log试试

幕布斯1329279

可以用 return new Error() ^_^||

幕布斯1329279

任何终止都只是终止当前函数,无法终止外部函数。

幕布斯1329279

方式一 each里面是回调函数。你在回调函数里return只是把回调函数return了。而不是你自己定义的那个函数
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript