前情提要
之前发现使用forEach循环数组时是无法跳出循环的,break和return都不生效。使用break会报错而使用return,数组中的所有元素依然会被遍历。
foreach的使用
1 | arr.forEach(callback(currentValue[, index[, array]]) { |
- callback: 在每个元素上执行的功能。它接受一到三个参数:
- currentValue:数组中正在处理的当前元素。
- index(可选的):currentValue数组中的索引。
- array(可选的):该数组forEach()被调用。
- thisArg(可选的):this执行时用作的值callback。
有一段关于跳出循环的提示
为什么
foreach的源码有点长,可以简单易懂地总结为如下
1 | Array.prototype.myEach = function(callback) { |
我们传入的function是这里的回调函数。在回调函数里面使用break肯定是非法的,因为break只能用于跳出循环,而我们的回调函数不是循环体。
在forEach中使用return,就只是在回调函数中使用return,将结果返回到上级函数,也就是这个for循环中,并不能影响到上级函数中的for循环,并没有结束for循环,所以return也是无效的。