能够在定义之前使用函数表达式

时间:2016-05-13 04:34:55

标签: javascript iife hoisting

根据提升函数,在定义表达式之前不能调用它们。我创建了一个模块,我试图在定义IIFE之前访问IIFE函数。 根据我的理解,它应该给出一个错误,说cookieManager.setPerstistentCookie不是一个函数,但它工作正常。为什么?

$(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
        }

})();

2 个答案:

答案 0 :(得分:2)

你已经在jQuery" ready"中包含了引用cookieManager的函数。处理程序。该代码不会运行直到DOM准备好,所以到那时为止定义了对象。换句话说,在它定义之前你还没有使用它。

答案 1 :(得分:0)

对不起家伙我的坏我正确的提升它是不正常的,它不应该像我解释的那样工作。 之所以有些工作是因为我在$(function(){})片段上方复制了相同的脚本片段,我忘了将其删除。 任何方式都感谢你的帮助。