考虑下面的代码:是否可以在匿名函数中访问函数?
(function($) {
function hello(who)
{
console.log('Hello: '+who);
}
})(jQuery);
$(document).ready(function() {
hello('World');
});
它是如何将有可能从匿名函数外部访问Hello功能?
考虑下面的代码:是否可以在匿名函数中访问函数?
(function($) {
function hello(who)
{
console.log('Hello: '+who);
}
})(jQuery);
$(document).ready(function() {
hello('World');
});
它是如何将有可能从匿名函数外部访问Hello功能?
假设你会想,最终其他的方法添加到这个封闭物,那么,你可以使用模块模式创建命名空间在封闭中私下公开地公布事物的方法。为了说明:
myAppNamespace.hello(myAppNamespace.world); // -> Hello: World
myAppNamespace.hello('Bob'); // -> Hello: Bob
myAppNamespace.helloText; // undefined
myAppNamespace.concatText; // undefined
另外,我用的自动执行功能的$
参数,使jQuery
传递的东西,你会使用$
内部访问jQuery
。
你喜欢
这似乎是最好的方法的最简单的例子。 –
(function($) {
function hello(who)
{
console.log('Hello: '+who);
}
$(document).ready(function() {
hello('World');
});
})(jQuery);
只是将所有的引用,我会做这样的事情
var hello = (function() {
return function(who)
{
console.log('Hello: '+who);
};
})(jQuery);
$(document).ready(function() {
hello('World');
});
你在哪里匿名函数,然后就可以存储并访问在任何范围内返回功能到范围内的hello函数。
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));
这里的方法和属性都只是为了显示的例子:
嗯,问题。为什么你将jQuery作为参数传递给匿名函数,然后不给它命名? – Kayla
@tylermwashburn:只需一些快速复制粘贴+编辑。 – PeeHaa