js学习break、continue、return、witch等语句

本文详细介绍了JavaScript中的六种关键控制流语句:break、continue、return、try/catch/finally、with以及空语句。这些语句分别用于循环控制、异常处理、作用域修改等,对于理解和编写JavaScript程序至关重要。
[size=medium]1、break语句[/size]
[size=small]break语句会使运行的程序立刻退出包含在最内层的循环或者退出一个switch语句。
javascript允许关键字break后跟一个标签名:break labelName;
注意,labelName知识一个标识符,此时并不像定义一个加标签的语句那样,在其后还要跟一个冒号。
当break和标签一起使用时,他将跳到这个带有标签的语句的尾部,或者终止这个语句。该语句可以是任何用括号括起来的语句,它不一定是循环语句或者switch语句,也就是说和标签一起使用的break语句甚至不必包含在一个循环语句或者switch语句之中。对break语句中的标签的唯一的限制就是它命名的是一个封闭语句。[/size]

[size=medium]2、continue语句[/size]
[size=small]continue额语句和break语句相似,所不同的是,它不是推出一个循环,而是开始循环的一次新迭代。
continue语句还可以和标签一起使用:continue labelName;
continue语句(无论是带标签还是不带标签)只能用在while、do/while、for、for/in语句的循环体之中。
执行continue语句时,封闭循环的当前迭代就会被终止,开始执行下一次迭代。这对笔筒类型的循环语句含义是不同的:
1)在while循环中,会再次检测循环开头的expression,如果他的值为true,将从头开始执行循环体。注:
while(expression){statement};

2)在do/while循环中,会跳到循环的地步,在顶部开始下次循环之前,会在次先检测循环条件。注:
do{statement}while(expression);

3)在for循环中,先计算increment表达式,然后再检测test表达式以确定是否应该执行下一次迭代。注:
for(initialize;test;increment){statement}

4)在for/in循环中,将以下一个赋给循环变量的属性名再次开始新的迭代。注:
for(variable in object){statement}
[/size]

[size=medium]3、return语句[/size]
[size=small]return语句就用于指定函数返回的值,这个值是函数调用表达式的值。
语法:return expression;
return语句只能出现在函数体内。在执行return语句时,先计算expre,然后返回它的值作为函数的值。当执行return语句时,即使函数主体还有其他语句,函数的执行也会停止。return语句还可以不带expression来终止程序的执行,并不返回值。如果一个函数执行了不带expression的return语句,或者因为它执行到了函数主体的尾部而返回,那么这个函数调用的表达式的值就是undefined。[/size]
[size=medium]
4、try/catch/finally语句[/size]
[size=small]try/catch/finally语句是javascript的异常处理机制。
通常情况下,控制流到达try块的尾部,然后开始执行finally块,一边进行必要的清楚操作。如果return语句、continue语句或break语句使控制流离开了try块,那么在控制流转移到新目的地之前,finally块就会被执行。
如果异常发生在try块中,而且存在一个相关的catch块处理异常,控制流首先将逐一到catch块,然后在转移到finally块。如果没有异常处理的局部catch块,控制流首先将转移到finally块,然后向上传播到最近的能够处理异常的catch从句。
如果finally块自身用return语句、continue语句、break语句或throw语句转移了控制流,或者调用了抛出异常的方法改变了控制流,那么等待的控制流转移江北舍弃,并进行新的转移。例如,如果finally从句跑出了一个异常,那么该异常将代替处于抛出过程中的异常。若果finally从句运行到了return语句,那么即使已经跑出了一个异常,而且该异常还没有被处理,该方法也会正常返回。[/size]
[size=medium]
5、witch语句[/size]
[size=small]witch语句用于暂时修改作用域链。 语法:with(object){statement} 这一语句能够优先的将object添加到作用域链的头部,然后执行statement,再把作用域链恢复到原始状态。
如:
witch(frame[1].document.forms[0]){
name.value="";
address.value="";
email.value="";
}

虽然有时使用witch语句比较方便,但是人们反对使用它。使用了with的javascript代码很难优化,因此它的运行速度比不使用with语句的等价代码要慢的多。
注意,还有其他几位合理的方法可以用来节省输入。如:
var form = frame[1].docuement.forms[0];
form.name.value="";
form.address.value="";
form.emai.value="";
[/size]
[size=medium]
6、空语句( ;)[/size]
[size=small]当创建一个具有空主体的循环时,空语句是有用的。如:[/size]
for(var i=0;;i<10;i++) /*empty*/  ;
#include <iostream> #include <cstring> using namespace std; int t, n, a[25], m; int dead_count; bool used[25], alive[25], dead_note[25]; bool potion[25], antidote[25], usedone[25], hunter_sl[25]; bool arcp[25], arca[25], arcl[25]; bool check(int sub, int op1, int op2){ const int ID = a[op1]; // identity if(op1 > n || op2 > n || op1 < 1 || op2 < 1) return false; if(ID == 2) return false; if(ID == 1 && sub != 0) return false; if(ID == 3 && sub != 3) return false; if(ID == 4 && sub != 1 && sub != 2) return false; if(used[op1]) return false; if(sub == 0) { if(op1 == op2) return false; if(!alive[op2]) return false; } if(sub == 1) { if(op1 == op2) return false; if(!alive[op2]) return false; if(!potion[op1]) return false; if(usedone[op1]) return false; } if(sub == 2) { if(!antidote[op1]) return false; if(usedone[op1]) return false; if(op1 != op2 && !dead_note[op2]) return false; } if(sub == 3) { if(op1 == op2) return false; if(!alive[op2]) return false; if(alive[op1]) return false; } return true; } void operate(int sub, int op1, int op2){ const int ID = a[op1]; // identity // 1-wolf, 2-villager, 3-hunter, 4-witch used[op1] = true; if(ID == 1 && sub == 0){ alive[op2] = false; dead_note[op2] = true; }else if(ID == 3 && sub == 3){ hunter_sl[op1] = true; alive[op2] = false; dead_note[op2] = true; }else if(ID == 4 && sub == 1){ alive[op2] = false; potion[op1] = false; usedone[op1] = true; dead_note[op2] = true; }else if(ID == 4 && sub == 2){ alive[op2] = true; antidote[op1] = false; usedone[op1] = true; dead_note[op2] = false; } return; } void roll(){ cout << "Wrong" << endl; memcpy(alive, arcl, sizeof arcl); memcpy(potion, arcp, sizeof arcp); memcpy(antidote, arca, sizeof arca); } int main(void){ cin >> t >> n; for(int i=1; i<=n; ++i) cin >> a[i]; memset(alive, true, sizeof alive); memset(potion, true, sizeof potion); memset(antidote, true, sizeof antidote); for(int k=1; k<=t; ++k){ memset(used, false, sizeof used); memset(dead_note, false, sizeof dead_note); memset(usedone, false, sizeof usedone); memset(hunter_sl, false, sizeof hunter_sl); memcpy(arcl, alive, sizeof alive); memcpy(arcp, potion, sizeof potion); memcpy(arca, antidote, sizeof antidote); cin >> m; bool flag = false; for(int i=1, op, t1, t2; i<=m; ++i){ dead_count = 0; cin >> op >> t1 >> t2; if(!check(op, t1, t2)){ roll(); flag = true; break; }else operate(op, t1, t2); } if(flag) continue; for(int i=1; i<=20; ++i, flag = (a[i] == 3) && (alive[i]) || (!alive[i] && !hunter_sl[i])); if(flag){ roll(); continue; } bool d = false; for(int i=1; i<=20; ++i) if(dead_note[i]) d = true; if(!d){ cout << "Safe" << endl; continue; } dead_count = 0; for(int i=1; i<=20; ++i) if(dead_note[i]) dead_count++; cout << dead_count << " "; for(int i=1; i<=20; ++i) if(dead_note[i]) cout << i << " "; cout << endl; } return 0; }
最新发布
10-17
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值