码迷,mamicode.com
首页 > 编程语言 > 详细

Javascript跳转语句

时间:2015-07-07 23:04:12      阅读:1712      评论:0      收藏:0      [点我收藏+]

标签:

跳转语句,从名称上就可以看出,它使得Javascript的执行可以从一个位置跳转到另一个位置。break语句是跳转到循环或者其他语句的结束,continue语句是终止本次循环的执行并开始下一次循环的执行。Javascript中的语句可以命名或带有标签,break和continue可以标识目标循环或者其他语句标签。

return语句让解释器跳出函数体的执行,并提供本次调用的返回值。throw语句触发或者抛出一个异常,它是与try/catch/finally语句一同使用的,这些语句指定了处理异常的代码逻辑。这是一种复杂的跳转语句,当抛出一个异常的时候,程序将跳转至最近的闭合异常处理程序,这个异常处理程序可以是在同一个函数中或者在更高层的调用栈中。

(1)标签语句

语句是可以添加标签的,标签是由语句前的标识符和冒号组成。

identifier:statement;

通过给语句定义标签,就可以在程序的任何地方通过标签名引用这条语句。也可以对多条语句定义标签,尽管只有在给语句块定义标签时它才更有用,比如循环和条件判断语句。通过给循环定义一个标签名,可以在循环体内部使用break和continue来退出循环或者直接跳转到下一个循环的开始。break和continue是Javascript中唯一可以使用语句标签的语句,

continue语句使用了这个标签:

mainloop:while(token != null){
        //忽略这里的代码
        continue mainloop;   //跳转到下一次循环
        //忽略这里的代码
}

这里用做标签的identifier必须是一个合法的javascript标识符,不能是保留字。

标签的命名空间和变量或函数的命名空间是不同的,因此可以使用同一个标识符作为语句标签和作为语句标签和作为变量名或函数名。

语句标签只有在它起作用的语句(当然也可以在它的子句中)内是有定义的。一个语句标签不能和它内部的语句标签重名,但在两个代码段不相互嵌套的情况下是可以出现同名的语句标签的。

带有标签的语句还可以带有标签,也就是说,任何语句都可以有很多个标签。

(2) break语句

单独使用break语句的作用是立即退出最内层的循环或switch语句。它的语法如下:

break;

由于它能够使循环和switch语句退出,因此这种形式的break只有出现在这类语句中才是合法的。

在循环中,无论出于什么原因,只要不想继续执行整个循环,就可以使用break来提前退出。当循环终止条件非常复杂时,在函数体内使用break语句实现这些条件判断的做法要比直接在循环表达式中写出这个复杂终止条件的做法简单很多。

下面的例子中,循环遍历整个数组元素来查找某个特定的值,当整个数组遍历完成后会正常退出循环,如果找到了需要查找的数组元素,则使用break语句退出循环。

for(var i = 0; i<a.length; i++){
    if(a[i] == target) break;
}

JavaScript中同样允许break关键字后面跟随一个语句标签(只有标识符,没有冒号):

break labelname;

当break和标签一块使用时,程序将跳转到这个标签所标识的语句块的结束,或者直接终止这个闭合语句快的执行。当没有任何闭合语句块指定了break所用的标签,这时会产生一个语法错误。当使用这种形式的break语句时,带标签的语句不应该是循环或者switch语句,因为break可以“跳出”任何闭合的语句块。这里的语句可以是由花括号括起来的一组语句,使用同一个标签来表示这一组语句。

在break关键字和labelname之间不能换行。因为javascript可以给语句自动补全省略掉的分号,如果break关键字和标签之间有换行,Javascript解释器会认为你在使用break不带标签的最简形式,因此会在break后补充分号。

当你希望通过break来跳出非就近的循环体或者switch语句时,就会用到带标签的break语句,下面是个例子:

var matrix = getData();    //从某处得到一个二维数组
//将矩阵中所有元素进行求和
var sum = 0,success = false;
//从标签名开始,以便在报错时退出程序
compute_sum: if(matrix){
    for(var x =0;x<matrix.length;x++){
    var row = matrix[x];
        if(!row) break compute_sum;
            for(var y = 0; y<row.length; y++){
                var cell = row[y];
                if(isNaN(cell)) break compute_sum;
                sum += cell;
            }
    }
    success = true;
}
//break语句跳转至此
//如果在success == false的条件下到达这里,说明我们给出的矩阵中有错误
//否则将矩阵中所有的元素进行求和

最后,需要注意的是,不管break语句带不带标签,它的控制权都无法越过函数的边界。比如,对于一条带标签的函数定义语句来说,不能从函数内部通过这个标签来跳转到函数外部。




Javascript跳转语句

标签:

原文地址:http://my.oschina.net/u/2352178/blog/475830

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!