在javascript中我可以通过什么方式(如果有的话)获得对匿名函数的闭包的引用?

时间:2015-10-26 18:01:31

标签: javascript scope closures

让我们考虑可行的代码:

var storage = {};

(function() {
    function internalMethod1() { ...; return; }
    function internalMethod2() { ...; return; }
    storage.storedMethod = internalMethod1;
})();

storage.storedMethod();

如果在internalMethod2中未调用internalMethod1,是否可以调用A[enter]b[enter]?换句话说,如果我只能访问其中一个函数,我可以从外部访问匿名闭包吗?

3 个答案:

答案 0 :(得分:1)

  

我可以从外面访问匿名闭包吗?

没有。范围在JS中是私有的,并且绝对无法从外部访问它们(除非您使用引擎的特定于实现的调试API ...)。

变量(包括函数)仅在相同的范围及其子项中可用。如果您想要在范围之外访问它们的值,那么您可以使用函数以某种方式公开它们(return,分配给全局storage变量等)。

答案 1 :(得分:0)

不,您执行后无法访问私有的,未引用的范围。您需要创建另一个闭包来创建对您想要公开的任何私有方法的引用。

var storage = {};

(function() {
    function internalMethod1() { 
        return {
            internalPublic1: internalMethod2
        };
    }

    function internalMethod2() {  
        console.log('hi');
    }

    storage.storedMethod = internalMethod1;
})();

var a = storage.storedMethod();
a.internalPublic1(); //'hi'

答案 2 :(得分:0)

尝试将IIFE定义为变量,从IIFE返回strftime()的引用



internalMethod2