如何从匿名自调用函数中暴露函数

how do i expose function from anonymous self invoking function?

本文关键字:函数 调用 暴露      更新时间:2023-09-26
 (function(){
   var a = function () {
     alert("hey now!! ");
   };
   return {"hi":function(){return a;}};
 })();
 hi();

这段代码不能工作。我如何暴露一个函数??

自调用函数返回一个具有属性hi的对象,该对象未添加到全局作用域中,因此您可以直接使用该属性。将函数的结果放入变量中:

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

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

o.hi()();

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

有两种基本方法:

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

(function(){
     function a (){
       alert("hey now!! ");
     };
     MyNameSpace = {a: a};
})();
MyNameSpace.a();

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

顺便说一下,它被称为"揭示模块模式",您可以阅读以更好地理解它:)

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

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

必须将匿名函数的返回值赋值给当前作用域中的变量:

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

它?

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

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

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

或者你可以像这样把你的'hi'函数包装在IIFE中…

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