こちらのサイト
http://noze.space/archives/415
で使用されているJavascript、最後のsetTimeoutを使った制御の中で
indexという変数が使用されています。
(「表示のタイミングを時間でずらす機能を追加」の部分
for文のiの意味で使用されているみたいですが、宣言されていません。
setTimeout内のfunctionにつづくbindメソッドにてiが渡されています。
bindメソッドは引数として渡したプロパティを結合した関数に渡す?
物のようですが、まだよく理解できていません。
setTimeout内のindexはBindメソッドによってiが渡されたということでしょうか。
(試しにindexをiに置き換えても動作しているようです。
(またiを使用してかつbindを削除すると動作しません、、
var scrollAnimationElm = document.querySelectorAll('.sa'); var scrollAnimationFunc = function() { for(var i = 0; i < scrollAnimationElm.length; i++) { var triggerMargin = 300; var elm = scrollAnimationElm[i]; var showPos = 0; if(elm.dataset.sa_margin != null) { triggerMargin = parseInt(elm.dataset.sa_margin); } if(elm.dataset.sa_trigger) { showPos = document.querySelector(elm.dataset.sa_trigger).getBoundingClientRect().top + triggerMargin; } else { showPos = elm.getBoundingClientRect().top + triggerMargin; } if (window.innerHeight > showPos) { var delay = (elm.dataset.sa_delay)? elm.dataset.sa_delay : 0; setTimeout(function(index) { scrollAnimationElm[index].classList.add('show'); }.bind(null, i), delay); } } } window.addEventListener('load', scrollAnimationFunc); window.addEventListener('scroll', scrollAnimationFunc);
直感的にはfor分のiが利用できないのは不思議でした。
Javascript特有の変数スコープのふるまいなのでしょうか。
もっとJS勉強進めますが、
indexが使える理由、Bindの役割、Bindを利用しないといけない理由だけでも
大まかでよいので教えてもらえましたら助かります。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー