Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:两个自执行函数如何相互访问_Javascript_Design Patterns_Anonymous Function - Fatal编程技术网

Javascript:两个自执行函数如何相互访问

Javascript:两个自执行函数如何相互访问,javascript,design-patterns,anonymous-function,Javascript,Design Patterns,Anonymous Function,我知道Javascript自动执行匿名函数是什么: (function(){ console.log('Hello World!'); })(); 我知道你可以传入参数: (function(window){ window.location(...); })(window); 但是如果我有两个自动执行的匿名函数,那么每个函数可以访问另一个吗?具体来说,第一个函数如何从第二个函数调用一个方法,并向其传递一个变量 (function(){ function foo () {

我知道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' ;
    }
})();

谢谢收听。

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

如果你不关心这些无障碍保护,你可以做的其他事情是:

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

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

如果你不关心这些无障碍保护,你可以做的其他事情是:

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

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

(function(){
    function foo () {return 'foo';}
})();
foo就像你做过的一样难以接近:

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

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

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(...);
}());
你也可以有这样的生活:

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';}

}());

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

(function(){
    function foo () {return 'foo';}
})();
foo就像你做过的一样难以接近:

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

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

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(...);
}());
你也可以有这样的生活:

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';}

}());

如果您需要这样做,可能会有更好的设计模式。你能提供实现细节或某种背景吗?把第一个生命放在第二个生命中。如果你需要这样做的话,你会想要使用更好的设计模式。你能提供实现细节或某种背景吗?把第一个生命放在第二个生命中。你会想使用