如何从外部访问内部嵌套函数?

时间:2014-01-03 06:01:13

标签: javascript

以下是我陷入困境的示例代码:

    <script>
    var mod = (function(){
        var inn1;
        function innfunc(){

        }
    }()); //mod is self expression function
    </script>

假设HTML包含这个javascript代码,我想打开我的Java控制台并调用innfunc()或变量inn1,然后我可以写什么?

或许类似于:mod.innfunc()

4 个答案:

答案 0 :(得分:1)

您必须通过从函数内部返回来公开“公共接口”:

return {
    inn: inn1,
    innfunc: innfunc
}

然后,您可以使用mod.innmod.innfunc访问它们。

答案 1 :(得分:0)

试试这个:

 var mod = function(){

    this.inn1 = "Hello";

    this.innfunc = function(){
      console.log('Here');
    }

  }; 
  var x = new mod();
  console.log(x.inn1);
  x.innfunc();

您可以使用它来使变量和方法公开

答案 2 :(得分:0)

您已执行了匿名函数,并将该函数的结果分配给mod您无权再访问该匿名函数或其任何属性

如果您想稍后访问其任何属性,有多种方法可以执行此操作。其中之一是:

返回具有此功能之外所需属性的对象

var mod = (function() {
  var inn1 = 'somevalue';

  var innfunc = function() {
  };

  return {
    inn1: inn1,
    innfunc: innfunc
  };
}()); //mod is self expression function

现在,您可以mod.innfunc()

访问它

答案 3 :(得分:0)

+1其他人说的话。我猜他们打败了我,哈哈。

我添加了一个你可以在函数中保密的东西的例子:

var mod = (function() {

    var publicText = 'Public!';
    var privateText = 'Private';

    var func1 = function() {
        console.log('hi');
    };

    var func2 = function() {
        console.log('there');
    };

    return {
        hi: func1,
        there: func2,
        publicText: publicText
    };
})();

mod.hi();
mod.there();

console.log(mod.publicText);

// This will fail, since the object.key privateText was never defined
console.log(mod.privateText);

希望这有帮助!