zoukankan      html  css  js  c++  java
  • 《JS权威指南学习总结--第五章语句》

    内容要点:

    一.throw语句

        所谓异常是当发生了某种异常情况或错误时产生的一个信号。

        抛出异常就是用信号通知发生了错误或异常状况。

        捕获异常时指处理这个信号,即采取必要的手段从异常中恢复。

        在JS中,当产生运行时错误或者程序使用throw语句时就会显示地抛出异常。使用try/catch/finally语句可以捕获异常。

         function fac(x){

            if(x<0) throw new Error("x不能是负数");  //如果输入参数是非法的,则抛出一个异常。JS解释器会立即停止当前正在执行的逻辑,并跳转至就近的异常处理程序。

            for(var f=1; x>1;f*=x,x--)  //否则,计算出一个值,并正常返回它    

            return f;

          };

    二.try/catch/finally语句

         try/catch/finally语句是JS的异常处理机制。

        其中try从句定义了需要处理的异常所在的代码块。catch从句跟随在try从句之后,当try块内某处发生了异常时,调用catch内的代码逻辑。catch从句后跟随finally块,后者中放置清理代码,不管try块中是否异常,finally块内的逻辑总会执行。

         try{

             //通常来讲,这里的代码会从头执行到尾而不会产生任何问题

            //但有时会抛出一个异常,要么是由throw语句直接抛出异常

           //要么是通过调用一个方法间接抛出异常

          }

          catch(e){

            //当且仅当try语句块抛出了异常,才会执行这里的代码

            //这里可以通过局部变量e来获得对error对象或者抛出的其他值的引用

            //这里的代码块可以基于某种原因处理这个异常,也可以忽略这个异常

            //还可以通过throw语句重新抛出异常

           }

          finally{

           //不管try语句块是否抛出了异常,这里的逻辑总是会执行,终止try语句块的方法有:

             1.正常终止,执行完语句块的最后一条语句

             2.通过break、continue或return语句终止

             3.抛出一个异常,异常被catch从句捕获

             4.抛出一个异常,异常未被捕获,继续向上传播

               }

         例:

            try{

               //要求用户输入一个数字

                  var n = Number(prompt("请输入一个正数",""));

                  //假设输入是合法的,计算这个数的阶乘

                 var f=fac(n);

                  //显示结果

                  alert(n+"!="+f);

           }

            catch(ex){

              //如果输入不合法,将执行这里的逻辑

               alert(ex);  //输入-3,出现alert("x不能是负数");

           }

    三.debugger语句

          这条语句用来产生一个断点(breakpoint),JS代码的执行会停止在断点的位置,这时可以使用调试器输出变量的值、检测调用栈等。

           function deb(x){
           if(x<0) debugger;
           for(var f=1;x>1;f*=x,x--)
             return f;
         };
          deb(-3);

           需要注意的是:

           debugger不会启动调试器。但如果调试器已经在运行中,这条语句才会真正产生一个断点。例如:firefox的调试扩展插件Firebug,则必须首先为待调试的网页启用Firebug,这样debugger语句才能正常工作。

         

  • 相关阅读:
    PTA 两个有序链表序列的合并
    PTA 递增的整数序列链表的插入
    PTA 链表逆置
    PTA 带头结点的链式表操作集
    _KPCR, _NT_TIB, _KPRCB
    FSOP
    逆向PspCreateProcess
    寒假训练 [GKCTF2020]Domo(4/250) 劫持vtable
    IO_FILE利用与劫持vtables控制程序流程、FSOP
    线程结构
  • 原文地址:https://www.cnblogs.com/hanxuming/p/5781703.html
Copyright © 2011-2022 走看看