我如何从匿名自我调用函数中公开函数?

DrS*_*ove 8 javascript function

 (function(){
   var a = function () {
     alert("hey now!! ");
   };
   return {"hi":function(){return a;}};
 })();

 hi();
Run Code Online (Sandbox Code Playgroud)

这段代码不起作用.我如何公开一个函数?

Guf*_*ffa 6

自调用函数返回具有该属性的对象hi,此对象不会添加到全局范围,以便您可以直接使用该属性.将函数的结果放在变量中:

var o =
(function(){

  var a = function (){
    alert("hey now!! ");
  };

  return {"hi":function(){return a;}};

})();
Run Code Online (Sandbox Code Playgroud)

使用该属性调用该函数只会返回变量中包含的函数a,因此您必须从函数调用返回值来调用包含警报的函数:

o.hi()();
Run Code Online (Sandbox Code Playgroud)

演示:http://jsfiddle.net/Guffa/9twaH/


Mar*_*sen 5

有两种基本方法:

var MyNameSpace = (function(){

     function a (){
       alert("hey now!! ");
     };

     return {a: a};

})();

MyNameSpace.a();
Run Code Online (Sandbox Code Playgroud)

要么

(function(){

     function a (){
       alert("hey now!! ");
     };

     MyNameSpace = {a: a};

})();

MyNameSpace.a();
Run Code Online (Sandbox Code Playgroud)

我更喜欢第二种方式,因为它看起来更干净

它被称为"暴露模块模式"btw,你可以阅读更好地理解它:)

https://addyosmani.com/resources/essentialjsdesignpatterns/book/#revealingmodulepatternjavascript