如果有人可以帮助我,我在闭包和检索声明的私有变量时遇到问题,该变量是 id 使用 jquery 选择的元素。我有一个像这样的模块:
var package = package || {};
(function() {
if(!package.slider)
package.slider = {};
function Slider() {
}
// --------- /Public Members --------- //
Slider.prototype = {
init: function(){
_setEvents();
}
};
// --------- Public Members --------- //
// --------- Private Members --------- //
var shoePreview = $('#shoe-preview'); /*somehow this variable does NOT get recognised even though I have it in the DOM.*/
function _setEvents(){
$.subscribe('getAllPerspectives', function(event){ _getAllPerspectives() });
$.subscribe('showPreview', _show);
$.subscribe('hidePreview', _hide);
}
function _getAllPerspectives(){
_getAngleShoeImage(helper.getCurrentAngle());
$.each(constants.angles, function(key, val){
if(val != helper.getCurrentAngle()){
_getAngleShoeImage(val);
}
});
}
function _getAngleShoeImage(angle){
var shoeImage = shoePreview;
shoeImage.html('<p>Hello World</p>');
}
var that = new Slider();
package.slider = that;
})();
$(document).ready(function(){
$.each(package, function (key, val){
val.init();
});
});
现在,如果您查看代码,有一个名为 shoePreview 的变量,我认为模块外的任何东西都无法访问该变量。
现在在代码的某个地方,稍后我将调用一些方法来触发 _getAngleShoeImage,其中我有一个名为 shoeImage 的变量被设置为私有 shoePreview 变量。
问题是,一旦我尝试使用 jquery 的 html() 调用,它似乎无法识别 shoePreview 变量是什么。
我已经通过替换 var shoeImage = $('#shoe-preview') 对此进行了测试,然后使用所需的标记调用 html() 并且它工作正常。
这个问题很小,但它让我发疯。我在写 var shoePreview = $('#shoe-preview'); 以错误的方式或有更多的东西。任何帮助将不胜感激。
谢谢。