[JavaScript]catch(ex)文のex

2034 ワード

try/catch文はJavaScript文が提供する例外処理メカニズムであり、try文ブロック内部の文が例外を放出すると、catch文ブロックでErrorタイプの例外情報をキャプチャすることができる.JavaScriptにはブロック役割ドメインがないことは知っていますが、この常識はcatch文ブロックで逆の現象を得ています.次のコードを参照してください.
(function(){

    try{

        throw new Error("error");

    }

    catch(ex){

        console.log(ex.message);

    }

    finally{

        console.log("final");

    }

    console.log(ex);

})();

上記コードの最後の行のコンソール出力(console.log(ex);例外プロンプトが投げ出され、exという識別子はありません.この現象は,catch文ブロックではexの役割ドメインが文ブロック内部に限られ,外部ではexという識別子を解析できないことを示している.
上記のコードを小さく調整し、catch内部でexが変数であることを再確認します.
(function(){

    try{

        throw new Error("error");

    }

    catch(ex){

        console.log(ex.message);

        var ex = "ex string";

    }

    finally{

        console.log("final");

    }

    console.log(ex);

})();

このとき最後の行のコンソール出力(console.log(ex);)異常を捨てないで、しかし彼が出力したのはundefined値で、catch文のブロックの中の賦値文は中で明らかにしたex変数に作用していないで、catchに捕獲したexに賦値しました.この現象は奇抜で,変数名解析の優先度は異常をキャプチャする識別子によって上書きされる.