考慮下面的代碼:是否可以在匿名函數中訪問函數?
(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