让我们考虑可行的代码:
var storage = {};
(function() {
function internalMethod1() { ...; return; }
function internalMethod2() { ...; return; }
storage.storedMethod = internalMethod1;
})();
storage.storedMethod();
如果在internalMethod2
中未调用internalMethod1
,是否可以调用A[enter]b[enter]
?换句话说,如果我只能访问其中一个函数,我可以从外部访问匿名闭包吗?
答案 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