【问题标题】:Javascript: Passing arguments to an inner setTimeOut function?Javascript:将参数传递给内部 setTimeOut 函数?
【发布时间】:2014-11-14 23:30:55
【问题描述】:

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

【问题讨论】:

  • 谢谢。但是什么代码?
  • 没有。 setTimeOut 需要从悬停函数中获取参数。

标签: javascript arguments settimeout


【解决方案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);
});

【讨论】:

  • 谢谢!工作得很好。
【解决方案2】:

setTimeoutfunction 不必将它们作为参数接收。

通过也在.hover() function 中定义,它的范围内将有sourceURL 等。

$('img.thumb').hover(function(){
  var sourceURL = $(this).attr('src');
  // ..

  tOut = setTimeout(function(){
    console.log(sourceURL);
    // ...
  }, 3000);
}, ...);

再次将它们用作命名参数将shadowvars,因此只能在function 中访问参数。

【讨论】:

  • 谢谢!会接受你的答案,但 Guffa 是第一位的。
猜你喜欢
  • 2018-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-17
  • 2021-09-21
  • 2015-05-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多