【问题标题】:How to modify arrow function to work in IE11如何修改箭头功能以在 IE11 中工作
【发布时间】:2021-06-25 01:03:32
【问题描述】:

我了解到箭头函数在 IE11 中不起作用。所以我下面的代码在 IE11 中抛出了一个语法错误。但是,我很难将其修改为正常功能。这是代码的问题行:

let selectors = [nextSlide, nextSlide - slick.slideCount, nextSlide + slick.slideCount].map( n => '[data-slick-index="${n}"]' ).join(', ');

我尝试将n => 更改为function(n) {},如下所示,但这在所有浏览器中都会出错。

let selectors = [nextSlide, nextSlide - slick.slideCount, nextSlide + slick.slideCount].map( function(n) { '[data-slick-index="${n}"]' } ).join(', ');

我做错了什么?

如果有助于查看发生了什么,这里是完整的功能:

$('.text-slider').on('beforeChange', function(event, slick, currentSlide, nextSlide){
  let selectors = [nextSlide, nextSlide - slick.slideCount, nextSlide + slick.slideCount].map( n => '[data-slick-index="${n}"]' ).join(', ');
  $('.shimmer2').removeClass('shimmer2');
  $(selectors).addClass('shimmer2');
});

谢谢!

【问题讨论】:

  • 你忘记了return
  • 谢谢。我添加了一个返回,它确实修复了错误。但它阻止了它下面的 removeClass 和 addClass 函数工作。
  • 来得不够快,@mkaatman
  • 我想知道您的选择器是否因为您的数学错误而无法正常工作?我会假设nextSlide - slick.slideCount 将是一个负数。对吗?

标签: javascript jquery internet-explorer-11


【解决方案1】:
let selectors = [nextSlide, nextSlide - slick.slideCount, nextSlide + slick.slideCount].map( n => '[data-slick-index="${n}"]' ).join(', ');

像上面那样没有大括号的箭头函数隐式地返回表达式/语句的结果。对于带有大括号的箭头函数或像这里这样的非箭头匿名函数,你想明确地return

let selectors = [nextSlide, nextSlide - slick.slideCount, nextSlide + slick.slideCount].map(function(n) {
    return '[data-slick-index="${n}"]';
}).join(', ');

【讨论】:

  • 你编辑了一个块引用...我没有“添加”任何东西,那不是我的代码,我是在向提问者展示他们的代码的哪一部分正在被谈论。
  • 抱歉,我以为您添加了 function(n),但现在意识到您引用了 OP 给出的第二个示例。我建议添加一个实际示例以使这个答案在这种情况下值得,因为它所做的一切都指出了问题。
  • 谢谢。我更改了它以匹配您的代码,这确实解决了错误。但它不再适用于我的其余代码。删除/添加类功能不再适用。这会以不同于箭头函数的方式返回选择器吗?
  • 鉴于您提供的代码,我可以看到没有什么明显的改变; selectors 仍然是单个字符串(单个 CSS 选择器,由逗号分隔 3 部分)。您可以登录您的$(selectors) 以确保它获取您期望的元素吗?无需修改您的代码;您可能可以直接在浏览器开发工具中调试它,可能在 beforeChange 处理程序中使用断点或监视表达式。
猜你喜欢
  • 2020-07-28
  • 1970-01-01
  • 2017-02-09
  • 1970-01-01
  • 2019-12-10
  • 1970-01-01
  • 1970-01-01
  • 2020-03-16
  • 2013-06-13
相关资源
最近更新 更多