1

カプセル化のために匿名の即時呼び出し関数を使用するコードが次のように見えるのを見てきました

(function(){
    var ABC = ...

    function XYZ(){
        ....
    }
})();

ABC や XYZ() は (スクリプト インジェクション/ハイジャックによって) 完全にアクセスできませんか?

4

2 に答える 2

2

オブジェクト O は、スコープにいずれかを参照する変数が 0 になると、スコープ内で「完全にアクセスできなくなります」

  • オブジェクト自体
  • O が子孫プロパティである任意のオブジェクト
  • 上記のいずれかで閉じた関数

この場合、上記のいずれも使用できませんABC。IIFE の範囲外のコンテンツへの参照がなく、プロパティであるオブジェクトへの参照もありません。これは、現在アクセスできないことを意味します。ただし、 で閉じてreturn を返すABCと、次の方法でアクセスできるようになりましXYZXYZABC XYZ

var outerXYZ = (function(){
    var ABC = "foo";

    function XYZ(){
        return ABC;
    }

    return XYZ;
})();

// no way to access ABC directly, but

var outerABC = outerXYZ();

スクリプト インジェクション/ハイジャックの部分はあいまいすぎて意味のある回答ができません。

于 2012-12-29T14:17:02.250 に答える
0

あなたが提供したサンプルでは、​​変数と関数は、自己呼び出し関数のスコープ外では完全にアクセスできません

于 2012-12-29T14:16:16.930 に答える