実現したいこと
単純なスライドショーを作成しています。
setIntervalを使用し3秒おきに最初の画像をフェードアウトし、次の画像をフェードインさせるのを繰り返すという挙動を目指します。
理解できない箇所
setInterval内に指定する関数の指定の方法が「()」がない記載方法が書いてあり、関数の発火をするときになぜ「()」がないのかが理解できませんでした。
関数を発火する際に「()」のなしはどのような場面で使うのか、「()」ありと何が違うのかを教えていただけると助かります。。!
//〇正しく動作 関数の後に()がない setInterval(switchImg, interval); //〇正しく動作 setIntervalの後にアロー関数なりfunctionなりを入れたときは()を入れると正しく動作 setInterval(() => { switchImg(); }, interval); //〇 正しく動作 そもそも関数使ってないので動く setInterval(() => { console.log('switchImg'); var imgs = container.find('img'); var first = imgs.eq(0); var second = imgs.eq(1); first.appendTo(container).fadeOut(); second.fadeIn(); }, interval); //× functionがないと()を入れると動作しない setInterval(switchImg(), interval);
該当のソースコード
//3秒置きに画像が変わるスライドショーを想定 $(function () { const interval = 3000; $('.slideshow').each(function(){ const container = $(this); //スライドショーの関数 function switchImg() { console.log('switchImg'); var imgs = container.find('img'); var first = imgs.eq(0);//最初の画像を取得 var second = imgs.eq(1);//次の画像を取得 first.appendTo(container).fadeOut(); second.fadeIn(); } /*★ここ以降のsetIntervalの記載の違いで挙動が変わる★ */ //〇 正しく動作 // setInterval(switchImg, interval); //〇 正しく動作 // setInterval(() => { // switchImg(); // }, interval); //〇 正しく動作 // setInterval(() => { // console.log('switchImg'); // var imgs = container.find('img'); // var first = imgs.eq(0); // var second = imgs.eq(1); // first.appendTo(container).fadeOut(); // second.fadeIn(); // }, interval); //× 関数が動かず変化なし。 console.log('switchImg');も出ない // setInterval(switchImg(), interval); }); });