1

我见过一些使用匿名立即调用函数进行封装的代码看起来像这样

(function(){
    var ABC = ...

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

ABC 或 XYZ() 是否完全无法访问(通过脚本注入/劫持)?

4

2 回答 2

2

一旦范围内有 0 个变量引用其中任一

  • 对象本身
  • O 是其后代属性的任何对象
  • 已关闭上述任何一项的功能

在这种情况下,上述任何一项都不可用:您没有ABC对 IIFE 范围之外的内容的引用,并且您没有对作为其属性的任何对象的引用。这意味着它现在无法访问。但是,如果您要关闭ABC,XYZ并返回XYZ,现在可以通过ABC 访问 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 回答