Javascript:两个自执行功能如何相互访问

时间:2014-06-26 00:09:10

标签: javascript design-patterns anonymous-function

我得到一个Javascript自执行匿名函数:

(function(){
    console.log('Hello World!');
})();

我知道你可以传递参数:

(function(window){
   window.location(...);
})(window);

但如果我有两个自动执行匿名函数,每个人都可以访问另一个吗?具体来说,第一个函数如何从第二个函数调用一个方法,并将其传递给变量?

(function(){
    function foo () {
        return 'foo';
    }

    // How can I call "bar('my name is')"
})();

(function(){
    function bar (str) {
        return str + ' bar' ;
    }
})();

感谢收听。

2 个答案:

答案 0 :(得分:2)

他们不能,这就是重点。通过包装这样的代码,它无法从外部访问。

如果您不关心此类可访问性保护,您可以做的其他事情是:

function foo() { bar() } // call bar
foo(); // execute immediately
function bar() { // do stuff }
bar(); // also execute immediately

答案 1 :(得分:2)

如果在特定执行上下文中声明或初始化函数,则只能从同一执行上下文或在其作用域链上具有第一个的另一个执行上下文中访问它。外部环境是否“匿名”无关紧要。例如。在下面:

(function(){
    function foo () {return 'foo';}
})();

foo 就像你做的那样无法理解:

(function(){
    var foo = function () {return 'foo';};
})();

function bar(){
    function foo () {return 'foo';}
}
bar();

在这种情况下,可以使用闭包:

var foo = (function(){
    var /* variables to hold in a closure */

    function foo () {return 'foo';}

    // Return a reference to foo
    // foo has a closure to this execution context
    return foo;
})();

(function() {
  // call foo here and pass parameters
  foo(...);
}());

您也可以将IIFE作为:

var foo = (function(){
    var /* variables to hold in a closure */

    // Return a reference to a function
    // that has a closure to this execution context
    return function () {return 'foo';}

}());