Как я могу выставить функцию из анонимного самовозбуждения функции? - PullRequest
8 голосов
/ 22 сентября 2011
 (function(){
   var a = function () {
     alert("hey now!! ");
   };
   return {"hi":function(){return a;}};
 })();

 hi();

Этот код не работает. Как мне выставить функцию ??

Ответы [ 7 ]

6 голосов
/ 22 сентября 2011

Самовозвратная функция возвращает объект со свойством hi, этот объект не добавляется в глобальную область видимости, поэтому вы можете напрямую использовать это свойство. Поместите результат функции в переменную:

var o =
(function(){

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

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

})();

Использование свойства для вызова функции вернет только функцию, содержащуюся в переменной a, поэтому для вызова функции, содержащей предупреждение, необходимо вызвать возвращаемое значение из функции:

o.hi()();

Демо: http://jsfiddle.net/Guffa/9twaH/

5 голосов
/ 22 сентября 2011

Существует два основных способа:

var MyNameSpace = (function(){

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

     return {a: a};

})();

MyNameSpace.a();

или

(function(){

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

     MyNameSpace = {a: a};

})();

MyNameSpace.a();

Я предпочитаю 2-й способ, так как он кажется чище

Между прочим, это называется "разоблачающий шаблон модуля", о котором вы можете прочитать, чтобы лучше понять его:)

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

0 голосов
/ 19 февраля 2016

Или вы можете обернуть вашу функцию 'hi' во IIFE как ...

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

 })();

 myFunction.hi();
0 голосов
/ 22 сентября 2011

Я полагаю, что для предоставления функции вместо ее кода синтаксис должен быть

var obj2 = (function(){

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

 return {"hi":a};

 })();

alert(obj2.hi());
0 голосов
/ 22 сентября 2011

Это?

(function(){
   var a = function () {
     alert("hey now!! ");
   };
   return {"hi":function(){return a;}};
 })().hi()();
0 голосов
/ 22 сентября 2011

Необходимо присвоить возвращаемое значение анонимной функции переменной в текущей области:

var f = (function() {
    var a = function() {
        alert("hey now!! ");
    };
    return {
        "hi": function() { return a; }
    };
})();
f.hi()();
0 голосов
/ 22 сентября 2011
 var obj = (function(){

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

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

 })();

 obj.hi()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...