javascript中try...catch...finallyを理解する

3722 ワード

本論文では、Javascriptのtry...catch...finallyの使い方を分析し、皆さんに参考にさせていただきました.具体的な内容は以下の通りです.
ちょっと複雑なので、判断文を使って、if elseで条件判断をします.if条件elseでないと、プログラムコードを書くためのコードノンという判断はもう熟知しています.
これも簡単だと思います.ミックスif else条件判定文にtry catchを加えて文を処理することができます.try catchではどの対象も処理できますが、throwで間違った文を投げて、その対象またはその対象のエラーを投げます.今日はtry...catchだけを言います.次の例は配列、時間、プロトタイプ、関数、数字の種類など

function trycatch () {
  var array = [234],
    newdate = new Date(),
    fun = function(){},
    is = 12.22,
    call;
  try{
    throw array + '
' + newdate.toLocaleString() + '
' + fun.prototype.constructor + '
' + (typeof is == 'number') +'
' + call ; // local 'e' } catch(e){ console.log(e); } finally{ console.log('err finally'); } } trycatch () // : // 234 // 2015/10/12 10:07:03 // function (){} // true // undefined
正確に言えば、tryには間違いが生じる可能性のある文を置いてください.try文が実行を開始し、エラーが発生した場合、catchは内部のステートメントと対応するtry内のエラーメッセージメッセージを実行します.finally文はいつ実行されますか?try文とcatch文が実行された後にのみfinally文を実行します.tryが異常を投げても、catchが捕獲してもfinally文を実行します.

function trycatch () {
  try{
    throw new Error('koringz');
  }
  catch(e){
    console.log(e.message);
  }
  finally{
    console.log('err finally');
  }
}
trycatch ()
//   :
// koringz
// err finally
tryによって間違った語句を出しました.catchで間違った情報をキャッチしました.しかし同じfinallyも出力しました.try catchワークフローの処理方法は分かりますが、finallyブロックのコード処理手順はよく分かりません.以前のfinally文に対して一貫した考え方で、finally出力はtryとcatchの制限と制約を受けません.以下はfinallyのいくつかの出力デモコードです.

function trycatch () {
  try{
    throw new Error('koringz');
  }
  finally{
    console.log('err finally');
    return console.log('new finally')
  }
}
trycatch ()
// err finally
// new finally
上記のようにtryは間違った語句を投げました.finallyは出力した結果です. //new finally

function trycatch () {
  try{
    throw new Error('koringz');
  }
  catch(e){
    console.log('err finally');
    return console.log('new finally')
  }
}
trycatch ()
// err finally
// new finally
上記のように、tryは間違った語句を投げ、catchはエラー出力結果と同じfinallyを捉える.r finally //new finally
tryの語句を修正する時:

function trycatch () {
  try{
    // 
  }
  catch(e){
    console.log('err finally');
    return console.log('new finally')
  }
}
trycatch ()
//  (viod)
//  (viod)
結果として出力はすべて空です.暇(viod)です.tryはエラーを出していませんので、catchは異常をキャッチしていません.出力結果は空です.
このケースを見てみます.以下の例を通して、try catch文の異常処理をよりよく知ることができます.

try{
  try{
    throw new Error('open');
  }
  catch(e){
    console.info(e.message);
    throw e
  }
  finally{
    console.log('finally');
  }
}
catch(e){
  console.log('op',e.message);
}
// open
// finally
// op open
tryがエラーを引き起こす可能性のあるコードブロック内にtry catchを入れ込み、入れ子のコードブロックtry内にエラーが発生する可能性のあるステートメントthrow new Error('open')を投げ込む.入れ子に続くtryは、入れ子のcatch処理にエラーを伝達し、最終的には入れ子のfinallyによって実行された後、最後の結果を見ました./op op openは、入れ子のcatchで捕獲されたエラー情報を最外層catchに捨てて捕獲しました.open
つまり、任意の所与の異常は、最も近い閉鎖的なcatchブロックから一度だけ捕獲される.
もちろん、「内部」ブロックから投げられた任意の新しい異常(catchブロックのコードも例外を投げることができるので)は、「外部」ブロックに捕獲されます.
以上が本文の全部です.javascriptプログラムの設計を勉強するのに役に立ちます.