Javascript:将参数传递给内部setTimeOut函数?

时间:2014-11-14 15:15:47

标签: javascript arguments settimeout

我有一个缩略图滚动条,我只想在鼠标悬停在缩略图上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);
  });

2 个答案:

答案 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内的参数可以访问。