return false break;

时间:2022-07-12 14:00:11

js中的return false;  break;

   var list = [, , , , ];
var list2 = ['a', 'b', 'c', 'd'];
for (var j = ; j < list2.length; j++) {
for (var i = ; i < list.length; i++) {
alert(list[i]);
if (list[i] == ) 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 false   break;

这个的原因是return 只能用在函数内部,不能再全局中使用。

  function a() {
var list = [, , , , ];
var list2 = ['a', 'b', 'c', 'd'];
for (var j = ; j < list2.length; j++) {
for (var i = ; i < list.length; i++) {
alert(list[i]);
if (list[i] == ) { return false; }
}
alert(list2[j]);
}
alert("ff");
}
a(); //1 2 3

这个说明 return  false; 把整个函数都停止了

  <script type="text/javascript" >
function a() {
var list = [, , , , ];
var list2 = ['a', 'b', 'c', 'd'];
for (var j = ; j < list2.length; j++) {
for (var i = ; i < list.length; i++) {
alert(list[i]);
if (list[i] == ) { return false; }
}
alert(list2[j]);
}
alert("ff");
}
function bb() {
a();
alert("ggg");
}
bb(); //1 2 3 ggg
</script>

return false; 至停止了其本身的函数

  function a() {
var list = [, , , , ];
var list2 = ['a', 'b', 'c', 'd'];
for (var j = ; j < list2.length; j++) {
for (var i = ; i < list.length; i++) {
alert(list[i]);
if (list[i] == ) { 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 = [, , , , ];
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 = ,
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[];
i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {}
}
} return object;
},

jquery中带args的调用,

注意:

由上面的方法可以看出,有args时,是通过apply方式调用的,所有args必须为数组

     var list = [, , , , ];
$.each(list, function (key, item) {
alert(key + "||" + item);
},['aaa','bbb','ccc']);

从each代码中可以看出,为什么可以在全局中使用,

因为这个时候,return false 其实不在全局中,在callback中,在一个function中,return false 也只是停止了循环中的一个callback

return false   break;

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 = [, , , , ];
for (var i = ; i < arr.length; i++) {
var val = arr[i];
switch (val) {
case : if (val == ) { console.log("a"); continue; } break;
case : if (val == ) { console.log("b"); continue; } break;
case : if (val == ) { console.log("c"); continue; } break;
default: break;
}
console.log("switch end" + i);
}
</script>

return false   break;

可以看出在上例中break;是跳出switch

continue是跳出for循环中的一个循环。