在javascript中执行其他函数的另一个函数

时间:2014-10-02 06:16:45

标签: javascript

嘿,伙计们在运行另一个函数时有点困惑。我试过的是:

var a = (function() {
    var babe = function() {
        console.log('yay');
    };
})();

当我运行像a.babe()这样的代码时,它会给我一个像TypeError: Cannot read property 'babe' of undefined这样的错误。为什么会这样发生?

我想从babe调用函数a ...我怎么能这样做? 我希望你们能帮助我......

提前致谢。

5 个答案:

答案 0 :(得分:3)

您正在创建一个名为babe的函数,它仅在其周围立即调用的函数表达式(IIFE)的范围内。由于您没有向调用者返回任何内容,因此默认情况下,函数调用将被计算为undefined,并将存储在a中。这就是你得到错误的原因,

TypeError: Cannot read property 'babe' of undefined

这意味着,您尝试在babe值上访问名为undefined的属性。在这种情况下,aundefined

而不是所有这些,你可以简单地从IIFE返回babe函数,包裹在一个对象中,就像这样

var a = (function() {
    return {
        babe: function() {
            console.log('yay');
        }
    };
})()

现在,返回的对象已分配给a,您可以像这样调用babe函数

a.babe();

答案 1 :(得分:0)

babe是该代码中IIFE的局部变量。它没有被退回。它不是任何东西的财产。它无法访问。

如果您希望从该功能外部调用它,则必须公开公开它。


  var a = (function() {
      var babe = function() {
          console.log('yay');
      }
      return babe;
  })();

  a();

  var a = (function() {
      var babe = function() {
          console.log('yay');
      }
      return {
          "babe": babe
      };
  })();

  a.babe();

答案 2 :(得分:0)

为什么你做了一个自动执行功能?您要做的是为此创建一个对象 babe的函数a,只需执行此操作:

var a = {
    babe: function() {document.write('yay');}
}

a.babe();

我创建了一个对象a并在其中添加了一个函数babe ..然后使用点表示法访问对象a内的函数

答案 3 :(得分:0)

要使用您的代码,您必须

var a = (function() {
  var babe = function() { console.log('yay'); } 
  return babe
})();

a();

a.babe()看看@thefourtheye或@Quentin。

答案 4 :(得分:0)

点语法用于访问对象的“属性”。所以,在一个简单的例子中,你可以使用类似的东西:

var a = {
  babe: function(){ console.log('yay') }
};

a.babe(); // yay

对于您的示例,如果要创建闭包以隐藏全局范围中的其他变量和函数,则必须返回一个对象,然后将其分配给a

var a = (function() {
    return {
        babe: function(){ console.log('yay') }
    }
})();

a.babe(); // yay

请记住,无论何时使用点,前面的变量都是对象。