Javascript 能够在定义函数表达式之前使用它
根据定义函数表达式之前,不能调用函数表达式。我创建了一个模块,试图在定义IIFE之前访问IIFE函数。 根据我的理解,它应该给出一个错误,说cookieManager.setPerstistentCookie不是一个函数,但它工作正常。为什么Javascript 能够在定义函数表达式之前使用它,javascript,iife,hoisting,Javascript,Iife,Hoisting,根据定义函数表达式之前,不能调用函数表达式。我创建了一个模块,试图在定义IIFE之前访问IIFE函数。 根据我的理解,它应该给出一个错误,说cookieManager.setPerstistentCookie不是一个函数,但它工作正常。为什么 $(function(){ var selectedContainerClassName = $('.mtaa-iml-dropdwn-options li.mtaa-iml-selected').data('parent');
$(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
}
})();
您已经将引用
cookieManager
的函数包装在jQuery“ready”处理程序中。在DOM准备就绪之前,该代码不会运行,因此在该时间定义了对象。换句话说,在定义之前,您没有使用它。您已经将引用cookieManager
的函数包装在jQuery“ready”处理程序中。在DOM准备就绪之前,该代码不会运行,因此在该时间定义了对象。换句话说,在它被定义之前,你不能使用它。对不起,伙计们,我的错误是,我关于提升的说法是正确的,它不工作,也不应该像我解释的那样工作。
它之所以能正常工作,是因为我在$(function(){})
代码段上方复制了相同的脚本代码段,但我忘记了将其错误删除。
无论如何,谢谢你们的帮助。对不起,伙计们,我的错误我是对的,它不起作用,而且不应该像我解释的那样起作用。 它之所以能正常工作,是因为我在
$(function(){})
代码段上方复制了相同的脚本代码段,但我忘记了将其错误删除。
无论如何,感谢您的帮助。时间方面的
$(..)
必须在代码的其余部分之后执行,这可能是因为$()
显式地等待加载DOM,而在您的情况下,这恰好还没有发生。(现在这是一个句子。)只有在分配错误之前尝试调用它,才会得到错误。只要定义了cookieManager(它是用var声明的),就可以了。函数表达式不会被提升。仅承载声明。按时间顺序$(..)
必须在其余代码之后执行,这可能是因为$()
显式地等待加载DOM,而在您的情况下,这恰好还没有发生。(现在这是一个句子。)只有在分配错误之前尝试调用它,才会得到错误。只要定义了cookieManager(它是用var声明的),就可以了。函数表达式不会被提升。仅承载声明。cookieManager也是IIFE@user2181397-那无关紧要。RHS被计算并返回一个值,它是否来自IIFE或任何其他类型的表达式并不重要IIFE@user2181397-那无关紧要。RHS被计算并返回一个值,它是否来自IIFE或任何其他类型的表达式并不重要。