(function(){
var a = function () {
alert("hey now!! ");
};
return {"hi":function(){return a;}};
})();
hi();
此代码不起作用。我如何公开一个函数?
答案 0 :(得分:6)
自调用函数返回具有属性hi
的对象,此对象不会添加到全局范围,以便您可以直接使用该属性。将函数的结果放在变量中:
var o =
(function(){
var a = function (){
alert("hey now!! ");
};
return {"hi":function(){return a;}};
})();
使用该属性调用该函数只会返回变量a
中包含的函数,因此您必须从函数调用返回值来调用包含警报的函数:
o.hi()();
答案 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();