好的,因为我理解了我的代码,我创建了一个promoSlides对象,我是一个名为init的私有函数,并返回一个js闭包(我不太熟悉)我返回init所以我可以在全局之外使用它的种类。当我运行文件时,我得到promoSlides是未定义的,FF的错误控制台说。我不知道我哪里出错了。我是新手,所以可能有些不对劲。哦和幻灯片是在我原来的文档中定义的,但为了简单起见我把它拿出来
var Slider = (function (name) {return name;}(Slider || {}));
Slider.promoSlides = ( function()
{
var slides;
var init = function(s)
{
slides = s;
sortSlides();
startTimer();
addListeners();
};
return
{
init : function a(s)
{
init(s);
}
};
})();
$(document).ready(function(){
Slider.promoSlides.init(slides);
});
答案 0 :(得分:4)
再次插入分号!
return
{
init : function a(s)
{
init(s);
}
};
需要
return {
init : function a(s)
{
init(s);
}
};
这是JavaScript中“功能”的结果,它只用return
查看你的行,并说:“哦,你忘了你的分号,我会为你添加它。”
它将return
更改为return;
,因此您的函数现在返回undefined,然后您在其下方有一些裸JSON,这是您的错误的来源。 Douglas Crockford实际上将此描述为JavaScript的“可怕部分”之一。
故事的寓意是:总是在用JavaScript编码时将你的大括号放在同一行。
答案 1 :(得分:4)
你的问题是致命的"假设的分号"在返回行中:
return //; <-- Javascript puts an implicit EOL here
{
init : function a(s)
{
init(s);
}
};
更改为
return {
init : function a(s)
{
init(s);
}
};
并且您的代码应该运行。
答案 2 :(得分:0)
上面已经描述了“假定的分号”问题。但是不要使用那么多函数调用!
var init = function() { ... };
return {
init : init
};
也适用,甚至更短:
var slides; // unused variable ???
return {
init: function init(s) {
slides = s;
sortSlides();
startTimer();
addListeners();
}
}