Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.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_Oop_Pointers_Scope_Anonymous Function - Fatal编程技术网

javascript匿名函数作用域

javascript匿名函数作用域,javascript,oop,pointers,scope,anonymous-function,Javascript,Oop,Pointers,Scope,Anonymous Function,我有以下匿名函数: (function() { var a = 1; var b = 2; function f1() { } function f2() { } // this => window object! // externalFunction(this); })(); function externalFunction(pointer) { // pointer.f1(); => fail! } 我需要从这个匿名函数调用外部函数,并将其指针传递

我有以下匿名函数:

(function() {
 var a = 1;
 var b = 2;

 function f1() {
 }

 function f2() {
 }

 // this => window object!
 // externalFunction(this);
})();

function externalFunction(pointer) {
 // pointer.f1(); => fail!
}
我需要从这个匿名函数调用外部函数,并将其指针传递给调用函数f1和f2。 但我不能这样做,因为这是指窗口对象而不是内部范围

我可以将功能设置为:

this.f1 = function() {}
但这是个坏主意,因为他们会在全球空间


如何将匿名空间传递给外部函数?

我仍然想知道,为什么要将外部需要的函数设置为私有函数。。。 但你看:

(function() {
  var a = 1;
  var b = 2;

  var obj = {
    f1: function() {
    },
    f2: function() {
    }
  }

  externalFunction(obj);
})();

function externalFunction(pointer) {
  pointer.f1(); // win
}

或者,您可以单独传递f1和f2,然后不需要将它们放入对象中。

您不能将作用域作为对象传递,但您可以从作用域中创建任意对象:

externalFunction({ f1: f1, f2: f2 });