我有一个缩略图滚动条,我只想在鼠标悬停在缩略图上3秒钟时触发一些动作。我有以下代码,但内部setTimeOut函数没有从外部函数获取参数 - sourceURL
控制台输出得到' undefined
'错误。但是' hover
'函数我确实看到了正确的sourceURL
值。
提前谢谢!
var tOut;
$('img.thumb').hover(function(){
var sourceURL = $(this).attr('src');
var lat = $(this).attr('lat');
var lng = $(this).attr('lng');
tOut = setTimeout(function(sourceURL,lat,lng){
console.log(sourceURL);//undefined
map.setView(new L.LatLng(lat, lng), (init_mapzoom+2));
},3000);
},function(){
clearTimeout(tOut);
});
答案 0 :(得分:1)
您不需要将变量传递给函数。由于函数是在变量存在的范围内创建的,因此它们会被捕获到函数的闭包中,因此即使在范围消失后函数也可以使用它们:
var tOut;
$('img.thumb').hover(function(){
var sourceURL = $(this).attr('src');
var lat = $(this).attr('lat');
var lng = $(this).attr('lng');
tOut = setTimeout(function(){
console.log(sourceURL);
map.setView(new L.LatLng(lat, lng), (init_mapzoom+2));
},3000);
},function(){
clearTimeout(tOut);
});
答案 1 :(得分:1)
function
的{{1}}不必作为参数接收它们。
同样在setTimeout
.hover()
内定义,范围内也会有function
等。
sourceURL
再次使用它们作为命名参数将shadow $('img.thumb').hover(function(){
var sourceURL = $(this).attr('src');
// ..
tOut = setTimeout(function(){
console.log(sourceURL);
// ...
}, 3000);
}, ...);
s,因此只有var
内的参数可以访问。