javascript - 在 Javascript 的内联函数中将参数作为值传递

标签 javascript jquery html

当我点击 Javascript/jQuery 中的链接时,我试图让我的页面幻灯片滚动,但我无法弄清楚如何将我的 for 循环的当前增量值传递为for 中的一个参数,用于绑定(bind)我的链接上的点击事件。当我单击时,它会调用我定义的函数,但使用的是我的 i 的当前值,而不是函数定义时的值...这是我的一些代码:

temp[0] = 0;
for(var i = 1; i < 8; i++) {
  temp[i] = defaultPositions["slide" + i].top;
  console.log(defaultPositions["slide" + i].top);
  $('a.slide' + i).bind('click', function() {
    $('html, body').animate({scrollTop:(defaultPositions['slide' + i].top / slidesScrollSpeed)}, 1000, function() {
      parallaxScroll();
    });
    return false;
  });
}

我如何传递 i 值,以便当我点击一个链接时,每个链接都有预期的值,而不是全部都是 slide8

最佳答案

总结:

for (var i=1;i<8;++i){
  (function(i){
    // Your code using `i` in callbacks here
  })(i);
}

你的问题是有一个变量 i 在你所有的闭包中共享(为 click 处理程序创建的匿名函数,所有这些都“关闭”了在函数外部声明的 i 的值),因此当该变量的值在循环中递增时,所有函数仍引用相同的更新值。

通过将循环主体包装在一个传入值 i 的函数中,您将获得一个、不同的变量 i 每次迭代都会关闭您的功能。为了更清楚地说明发生了什么,您也可以将其写为:

for (var i=1;i<8;++i){
  (function(slideNum){
    // Your code using `slideNum` in callbacks here
  })(i);
}

或者,您可以为闭包创建自定义变量,如下所示:

for (var i=1;i<8;i++){
  var slideNum = 'slide'+i; // Create a new variable to use in the closure
  temp[i] = defaultPositions[slideNum].top;
  $('a.slide'+i).bind('click', function() {
    $('html, body').animate({
      scrollTop:(defaultPositions[slideNum].top/slidesScrollSpeed)
    }, 1000, function() { parallaxScroll(); });
    return false;
  });
}

另外,请注意,根据 parallaxScroll() 的实现,您可以简化该行:

$('html, body').animate({
  scrollTop:(defaultPositions[slideNum].top/slidesScrollSpeed)
}, 1000, parallaxScroll );

关于javascript - 在 Javascript 的内联函数中将参数作为值传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11800150/

相关文章:

Javascript/Jquery 复选框条件超链接

javascript - 将 HTML 值与 jquery 输入值进行比较

php - 重定向后 session 丢失(仅限实时服务器)

javascript - 如何验证函数是否在 JavaScript 中定义?

javascript - 尝试在使用 beforeunload 时阻止警报。 preventDefault 在 Chrome 中有效,但在 Firefox 中无效

javascript - 这是有效的 jquery 拆分吗?

javascript - 根据选项菜单中选择的内容验证选择输入字段

javascript - 如何在 div 中滑动或动画化多个元素?

html - Bootstrap 中的 HR 标签问题

javascript - 显示为正方形的图标