请考虑以下代码:
(function($) {
function hello(who)
{
console.log('Hello: '+who);
}
})(jQuery);
$(document).ready(function() {
hello('World');
});
如何从匿名函数外部访问hello函数?
答案 0 :(得分:2)
我会做这样的事情
var hello = (function() {
return function(who)
{
console.log('Hello: '+who);
};
})(jQuery);
$(document).ready(function() {
hello('World');
});
您从匿名函数返回一个函数,然后您可以在任何您喜欢的范围内存储和访问该函数
答案 1 :(得分:1)
(function($) {
function hello(who)
{
console.log('Hello: '+who);
}
$(document).ready(function() {
hello('World');
});
})(jQuery);
将所有对hello函数的引用移到范围内。
答案 2 :(得分:1)
假设您最终还想要为此闭包添加其他方法,您可以使用模块模式创建命名空间:
var myAppNamespace = (function($){
var exports = {}, // the return object
helloText = 'Hello: '; // private variable
function concatText() {
var returnString = '';
for (var i = 0, il = arguments.length; i < il; i++) {
returnString += arguments[i];
}
return returnString;
} // private method
exports.world = 'World'; // public property
exports.hello = function ( who ) {
console.log(concatText(helloText, who));
}; // public method
return exports; // assign exports to myAppNamespace
}(jQuery));
这里的方法和属性只是为了展示在闭包内私下和公开声明事物的方法的例子。例如:
myAppNamespace.hello(myAppNamespace.world); // -> Hello: World
myAppNamespace.hello('Bob'); // -> Hello: Bob
myAppNamespace.helloText; // undefined
myAppNamespace.concatText; // undefined
另外,我在自执行函数中使用了$
参数,以便将jQuery
传递给某些内容,您可以在内部使用$
来访问jQuery
。