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

时间:2011-09-22 10:57:25

标签: javascript function

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

 hi();

此代码不起作用。我如何公开一个函数?

7 个答案:

答案 0 :(得分:6)

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

var o =
(function(){

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

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

})();

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

o.hi()();

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

答案 1 :(得分:5)

有两种基本方法:

var MyNameSpace = (function(){

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

     return {a: a};

})();

MyNameSpace.a();

(function(){

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

     MyNameSpace = {a: a};

})();

MyNameSpace.a();

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

它被称为“揭示模块模式”btw,您可以阅读以更好地理解它:)

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

答案 2 :(得分:0)

 var obj = (function(){

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

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

 })();

 obj.hi()

答案 3 :(得分:0)

您必须将匿名函数的返回值分配给当前范围中的变量:

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

答案 4 :(得分:0)

它?

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

答案 5 :(得分:0)

我想为了公开函数而不是代码,语法应该是

var obj2 = (function(){

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

 return {"hi":a};

 })();

alert(obj2.hi());

答案 6 :(得分:0)

或者你可以把你的'hi'功能包装在像这样的IIFE ......

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

 })();

 myFunction.hi();