Laut Hubfunktionsausdrucken können Ausdrücke erst aufgerufen werden, nachdem sie definiert wurden. Ich habe ein Modul erstellt, in dem ich versuche, auf die IIFE-Funktionen zuzugreifen, bevor das IIFE definiert ist. Nach meinem Verständnis sollte es einen Fehler gegeben haben, dass cookieManager.setPerstistantCookie ist keine Funktion, aber es funktioniert gut. Warum?Kann den Funktionsausdruck verwenden, bevor er definiert wird
$(function(){
var selectedContainerClassName = $('.mtaa-iml-dropdwn-options li.mtaa-iml-selected').data('parent');
cookieManager.setPersistentCookie(cookieManager.getCookieNameByComponent('imlookingTo') , selectedContainerClassName);
});
var cookieManager = (function(){
var cookieEnum = {
imlookingTo : "selectedUIContainer"
}
function getPerstistentCookieExpiryTime(){
var expiration_date = new Date();
expiration_date.setFullYear(expiration_date.getFullYear() + 1);
return expiration_date.toGMTString();
}
var setPersistentCookie = function(cname, cvalue) {
var expires = "expires="+ getPerstistentCookieExpiryTime();
document.cookie = cname + "=" + cvalue + "; " + expires;
}
return {
setPersistentCookie : setPersistentCookie,
getCookieNameByComponent : getCookieNameByComponent
}
})();
* Timing-weise * '$ (..)' muss nach dem Rest des Codes ausgeführt werden, vermutlich weil '$()' explizit auf das Laden des DOM wartet, was in Ihrem Fall nicht passiert ist noch. (Nun, das ist ein Satz.) – deceze
Sie erhalten nur einen Fehler, wenn Sie versuchen, es vor der Zuweisung aufzurufen. Solange * cookieManager * definiert ist (es wird mit * var * deklariert), ist alles in Ordnung. – RobG
Ein Funktionsausdruck wird nicht gehisst. Nur Deklarationen werden gehostet. – Amit