js中的return false; break;
var list = [1, 2, 3, 4, 5]; var list2 = ['a', 'b', 'c', 'd']; for (var j = 0; j < list2.length; j++) { for (var i = 0; i < list.length; i++) { alert(list[i]); if (list[i] == 3) break; } alert(list2[j]); } alert("ff"); // 1 2 3 a 1 2 3 b 1 2 3 c 1 2 3 d
由结果可以看出break只能跳出第一个循环
return false;
这个的原因是return 只能用在函数内部,不能再全局中使用。
function a() { var list = [1, 2, 3, 4, 5]; var list2 = ['a', 'b', 'c', 'd']; for (var j = 0; j < list2.length; j++) { for (var i = 0; i < list.length; i++) { alert(list[i]); if (list[i] == 3) { return false; } } alert(list2[j]); } alert("ff"); } a(); //1 2 3
这个说明 return false; 把整个函数都停止了
<script type="text/javascript" > function a() { var list = [1, 2, 3, 4, 5]; var list2 = ['a', 'b', 'c', 'd']; for (var j = 0; j < list2.length; j++) { for (var i = 0; i < list.length; i++) { alert(list[i]); if (list[i] == 3) { return false; } } alert(list2[j]); } alert("ff"); } function bb() { a(); alert("ggg"); }
bb(); //1 2 3 ggg </script>
return false; 至停止了其本身的函数
function a() { var list = [1, 2, 3, 4, 5]; var list2 = ['a', 'b', 'c', 'd']; for (var j = 0; j < list2.length; j++) { for (var i = 0; i < list.length; i++) { alert(list[i]); if (list[i] == 3) { return false; } } alert(list2[j]); } alert("ff"); } function bb() { a(); alert("ggg"); } //1 2 3 bb(); alert("dfs"); //1 2 3 ggg dfs
全局中也只是把自己所在的函数停止了,不管是几层循环
在jquery中也是这样吗?
试试!
<script type="text/javascript" > var list = [1, 2, 3, 4, 5]; var list2 = ['a', 'b', 'c', 'd']; $(list).each(function (key, item) { $(list2).each(function (key1, item1) { alert(item1); if (item1 == 'b') { return false; } }); });//a b a b a b a b a b </script>
可以看出return false;在全局中使用了,为什么
jquery 中each代码
// args is for internal usage only each: function( object, callback, args ) { var name, i = 0, length = object.length, isObj = length === undefined || jQuery.isFunction(object); if ( args ) { if ( isObj ) { for ( name in object ) { if ( callback.apply( object[ name ], args ) === false ) { break; } } } else { for ( ; i < length; ) { if ( callback.apply( object[ i++ ], args ) === false ) { break; } } } // A special, fast, case for the most common use of each } else { if ( isObj ) { for ( name in object ) { if ( callback.call( object[ name ], name, object[ name ] ) === false ) { break; } } } else { for ( var value = object[0]; i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {} } } return object; },
jquery中带args的调用,
注意:
由上面的方法可以看出,有args时,是通过apply方式调用的,所有args必须为数组
var list = [1, 2, 3, 4, 5]; $.each(list, function (key, item) { alert(key + "||" + item); },['aaa','bbb','ccc']);
从each代码中可以看出,为什么可以在全局中使用,
因为这个时候,return false 其实不在全局中,在callback中,在一个function中,return false 也只是停止了循环中的一个callback
callback中不能使用break;
所以在each中return false 来代替break跳出循环;只能跳出一层循环。
总结:
在js中break只能跳出一个循环
return false 可以停止其所在的function,但与其function所并行的操作继续运行。
在jquery的each中:
用return false;来跳出一个循环。不能使用break;
注意:switch中可以使用break;但不可以使用continue;
例:
<script type="text/javascript"> var arr = [1, 2, 3, 4, 5]; for (var i = 0; i < arr.length; i++) { var val = arr[i]; switch (val) { case 1: if (val == 1) { console.log("a"); continue; } break; case 2: if (val == 1) { console.log("b"); continue; } break; case 3: if (val == 3) { console.log("c"); continue; } break; default: break; } console.log("switch end" + i); } </script>
可以看出在上例中break;是跳出switch
continue是跳出for循环中的一个循环。