这里一旦我在slideUp中为'img'变量指定了一个null值,并且调用'click on imageGallery'img值是'undefined',为什么会这样?
$(".imageGallery").click(function(){
console.log(img+"first");
var img = $(this).attr("src"); //image source
console.log(img+"second");
var num = $(this).attr("alt"); //image name
$('#popup').slideDown("600",function(){
$(this).html("<div> <p>"+num+"</p> </div> <img src="+img+">");
$("#popup p").addClass("popupName");
$("#popup img").addClass("popupImg");
$("#popup div").addClass("popupNameBg");
})
$('#popup').click(function(){
$('#popup').slideUp("500");
img = null;
console.log(img+"third");
return false;
})
})
答案 0 :(得分:3)
在设置之前,请先阅读img
。当然,这将是未定义的,因为这是hoisted variables work的方式。
console.log(img+"first"); <--- reading variable before you set the value, it will be undefined
var img = $(this).attr("src"); <-- /set variable value
console.log(img+"second"); <-- will have new value
您的代码实际上就是这样:
var img;
console.log(img+"first");
img = $(this).attr("src");
console.log(img+"second");
将其设置为null意味着没有任何内容,因为每次单击您都处于新的“范围”并定义新变量。因此,当您单击弹出窗口时,它将img设置为null,问题是您不再使用该变量。
同样在每次点击时,您都会将新点击绑定到弹出窗口,这意味着您将有很多点击事件。