【问题标题】:javascript anonymous function scopejavascript匿名函数作用域
【发布时间】:2011-03-11 21:11:34
【问题描述】:

我有以下匿名函数:

(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() {}

但这是个坏主意,因为它们将在全球空间中......

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

【问题讨论】:

    标签: javascript oop pointers scope anonymous-function


    【解决方案1】:

    我仍然想知道您为什么要将函数设为私有,而这些函数是外部需要的...... 但是你去:

    (function() {
      var a = 1;
      var b = 2;
    
      var obj = {
        f1: function() {
        },
        f2: function() {
        }
      }
    
      externalFunction(obj);
    })();
    
    function externalFunction(pointer) {
      pointer.f1(); // win
    }
    

    或者你可以单独传递 f1 和 f2,那么你就不需要将它们放入一个对象中。

    【讨论】:

      【解决方案2】:

      您不能将作用域作为对象传递,但您可以使用作用域中的任何内容创建对象:

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

      【讨论】:

        猜你喜欢
        • 2011-12-15
        • 2011-06-22
        • 2011-12-11
        • 2017-08-13
        • 2011-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多