开发者问题收集

简单的 Javascript 幻灯片说明

2015-08-03
49

我在 Codepen 上找到了这个脚本,它确实引起了我的兴趣,但也让我摸不着头脑。整个代码库并不大,实际上整个幻灯片脚本只有大约 18 行。它在下面,

(function(){
  var counter = 0, $items = document.querySelectorAll('.diy-slideshow section'),numItems = $items.length; 
  var showCurrent = function(){
    var itemToShow = Math.abs(counter%numItems);
    [].forEach.call( $items, function(el){
      el.classList.remove('show');
    });
    $items[itemToShow].classList.add('show');    
  };
  setInterval(function() {
     counter++;
     showCurrent();
  }, 5000);
})();  

所以我感到困惑的部分是 showCurrent 函数。更具体地说,它是

[].forEach.call($items, function(el){...};
的部分。现在我明白 [] 是一个数组,但我不明白它从哪里获取数组的值,函数如何知道数组中有 X 个项目需要循环?是什么让 [].forEach 循环遍历所有已知元素?
1个回答

[].foreach.callArray.prototype.foreach.call 的简写。每个 javascript 函数都是一个具有自己方法的对象。 call() 就是其中之一。

call() 的第一个参数是 thisArg ,它表示在函数期间将表现为 this 的对象。在您的示例中, $items (它是一个 DOMElement 数组)将在 foreach 调用中为 this

Thomas Ruiz
2015-08-03