前言:
而今我们对“js跳出function”大致比较关切,我们都需要分析一些“js跳出function”的相关知识。那么小编在网络上收集了一些关于“js跳出function””的相关内容,希望同学们能喜欢,各位老铁们一起来了解一下吧!语句
表达式语句,最简单也是最常见的语句。
var a = 1
复合语句,使用逗号或是花括号将几个表达式,连接在一起,形成一个新的表达式。
{ var a = 1; var b = 2;}
空语句,直接使用“;”就可以了。常见的是在循环中。
for(;;){}
声明语句
“var”可以用于声明一个或是多个变量。
var a = 1, b = 2
“function”,用于声明函数。
function a(n){ return n}
条件语句
“if”、“else if”、“else”,“if”加上判断条件,当判断条件为真,则会执行“if”的复合语句,反之则跳过。“else”只能当使用过“if”后,才可以使用,表示之前判断条件都不成立时,则执行“else”的复合语句。如果想在同级有多个判断情况分支,则中间的判断要使用“else if”。根据判断需要自行组合。条件语句支持嵌套使用。
var a = 1if(a==0){ a = 5}// a = 1,因为a!=0,所以if的判断条件不成立,则不执行if的复合语句var a = 1if(a==0){ a = 5}else{ a = 3}// a = 3,因为a!=0,所以if的判断条件不成立,则执行else的复合语句var a = 1if(a==0){ a = 5}else if(a==1){ a = 4}else if(a==4){ a = 7}else{ a = 3}// a = 4,因为a!=0,但是a==1,所以if的判断条件不成立,而第一个else if成立,则执行第一个else if的复合语句。由于第一个else if和第二个else if是同级的,所有第一个else if的复合语句运行完以后,会跳出这级判断,不会进行下面的判断了var a = 1if(a==0){ a = 5}else{ if(a==1){ a = 2 }else{ a = 3 }}// a = 2
“switch”,结构化判断方式,用关键词switch来指定判断条件,用case来做条件判断的各种分支情况,用default来表示都不满足的解决方式,必须放在最后。case结果内可以加上break来中断跳出判断,要不然会继续判断。
var a = 1switch(a){ case 1: a = 2 case 2: a = 3 default: a = 4}// a = 4,因为a==1,所以执行case 1,这时候a = 2,然后会继续向下判断。因为a==2,所以执行case 2,这时候a = 3。然后依次继续,最后a = 4var a = 1switch(a){ case 1: a = 2 break case 2: a = 3 break default: a = 4 break}// a = 2,因为a==1,所以执行case 1,这时候a = 2,这时候有个break,跳出switch。所以最后a = 2
循环语句
“while”,直到不满足循环条件跳出循环。
var a = 1while(a<3){ console.log(a) // 输出1,2。一开始a=1且<3,所以进入循环,输出1,然后a=2,但是a<3,所以又再一次进入循环。输出2,然后a=3,a==3,所以不满足<3的条件,跳出循环 a++}
“do/while”,先进入循环体运行,运行完后再判断循环条件,直到不满足循环条件跳出循环。
var a = 1do{ console.log(a) // 输出1。 a++}while(a<1)
“for”,一种循环的方式,for(initialize;test;increment)
for(var i=0;i<10;i++){ console.log(i)}
“for/in”,for(variable in object)statement,variable通常是一个变量名,也可以是一个可以产生左值的表达式或者一个通过var语句声明的变量,总之必须是一个适用于赋值表达式左侧的值。object是一个表达式,这个表达式的计算结果是一个对象。
for(var i in a){ console.log(i)}
跳转语句
“break”,单独使用可以立即退出当前层的循环或switch语句。
for(var i=0;i<10;i++){ if(i==2){ break; } consoloe.log(i) // => 会输出:0 1,当i==2,则会跳出循环}var a = 1switch(a){ case 0: console.log(0) // 没有输出,a==1,直接跳出switch case 1: break default: break}
“continue”,直接跳过接下来的语句,完成这轮循环,回到循环判断条件处,继续开始。
for(var i=0;i<10;i++){ if(i==2){ break; } consoloe.log(i) // => 会输出:0 1,当i==2,则会跳出循环}
“break”、“continue”结合标签的高级用法,可以制定跳出(进行下一轮)循环。JavaScript支持标签用法,identifier:statement,break identifier,continue identifier。
a:for(var i=0;i<10;i++){ for(var j=0;j<10;j++){ console.log(j) if(i==1){ break a; // 输出0,1,2,3,4,5,6,7,8,9,0。break会直接跳出标签a指定的那个循环 } }}a:for(var i=0;i<2;i++){ for(var j=0;j<10;j++){ console.log(j) if(j>0){ continue a; // 输出0,1,0,1。continue会直接跳到标签a指定的那个循环,开始新的一轮 } }}
“return”,只能用于函数内,用于跳出函数,并且返回值。如果return单独使用不带返回值,则会返回undefined。
function v1(){ return consoloe.log(1)}function v2(){ return 1}var a = v1() // a = undefined,没有打印1,因为return跳出函数后面的不执行了var b = v2() // b = 1
“throw”,抛出异常(当发生某种异常情况或错误时产生的一个信号),就是用信号通知发生了错误或异常情况。
function x(){ throw new Error('抛出一个异常')}
“try/catch/finally”,捕获异常,随即采取必要手段从异常中恢复。try处理异常所在的代码块。catch捕获到异常后处理,后面接的的圆括号内容是异常对象值。finally内的代码,在最后一定会执行。catch、finally可选。
try{ //通常来讲,这里的代码会从头执行到尾而不会产生任何问题, //但是有时会抛出一个异常,要么是由throw语句直接抛出异常, //要么是通过调用一个方法间接抛出异常}catch(e){ //当且仅当try语句块抛出了异常,才会执行这里的代码 //这里可以通过局部变量e来获得对Error对象或者抛出的其他值的引用 //这里的代码块可以基于某种原因处理这个异常,也可以忽略这个异常 //还可以通过throw语句重新抛出异常}finally{ //不管try语句块是否抛出异常,这里的逻辑总是会执行,终止try语句块的方式有: // 1)正常终止,执行完语句块的最后一条语句 // 2)通过break、continue或return语句终止 // 3)抛出一个异常,异常被catch从句捕获 // 4)抛出一个异常,异常未被捕获,继续向上传播}
“with”,用于临时扩展作用域链,将object添加到作用域链的头部,然后执行语句,最后把作用域链恢复到原始状态。在严格模式中是禁止使用with语句的,并且在非严格模式里,也不推荐使用。
// 操作document.forms[0].address.valuewith(document.forms[0]){ name.value = "" address.value = "" email.value = ""}
“debugger”,当调试模式可以使用的时候,运行到这句话,类似断点,将停止下来。
if(isDebugger){ debugger}
“use strict”,ECMAScript 5引入的一条指令,运行到这句后,将启动严格模式。严格模式的优点是提高代码解析与运行速度;禁用一些不合理的语法,减少代码的怪异行为。缺点是某些代码在严格模式下会报错,尤其引入公用与第三方模块的时候需要注意;有些严格模式的特性在不同浏览器的支持情况不同,需要注意兼容问题。
严格模式与非严格模式的区别:
1.禁用with语法,使用将报错。因为解析with语法时作用域的情况会非常复杂,严重影响代码的解析与运行速度;
2.禁止删除变量与函数;
3.属性描述符(propertyDescriptor)相关能改变属性描述符的方法有Object.defineProperty、Object.defineProperties、Reflect.defineProperty、Reflect.defineProperties、Object.freeze、Object.seal;获取一个属性描述符可以用Object.getOwnPropertyDescriptor、Object.getOwnPropertyDecriptors,ES6中还有Reflect.getOwnPropertyDescriptor、Reflect.getOwnPropertyDescriptors;
4.给不允许扩展的object增加属性会报错;
5.给未申明的变量赋值会报错;
6.定义object时属性重名会报错;
7.形参重复时会报错;
8.eval有独立作用域,eval不能作为变量名或函数名,类似关键字;
9.arguments是形参的副本(类似浅拷贝);arguments不能作为变量名或函数名,类似关键字;
10.禁用caller与callee。
标签: #js跳出function