前段时间团队里讨论了一个问题,如何在forEach里实现break,目前有几种方案throw法抛出一个错误,但是需要注意的是要抛出一个可以与别的错误区别开的错误,这样不会干扰别的代码抛出的错误varBreakException={};try{[1,2,3].forEach(function(v){console.log(v);//只输出1,2if(v===2)throwBreakException;});}catch(e){if(e!==BreakException)throwe;}此法有点丑陋,加了不少代码空跑循环在外层加一个标识,如果此标识为true,接下来的循环空跑,码如下:varbreakFlag=false;[1,2,3].forEach(function(v){if(breakFlag===true){returnfalse;}if(v===2){breakFlag=true}console.log(v)//只输出1,2})这个在外层加了一个变量,为了不污染外层的环境,我们可以使用forEach的第二个参数context,把标识放在这里[1,2,3].forEach(function(v){if(this.breakFlag===true){returnfalse;}if(v===2){this.breakFlag=true}console.log(v)//只输出1,2
...
继续阅读
(17)