大家好!
今天我們要實作的靜態函式有點像 Promise 的感覺。
我們進入今天的主題吧!
Felix.queue = function (fns, data) {
if (!Felix.isArrayLike(fns)) return;
var i = 0;
var next = function (data) {
var fn = fns[i++];
return fn === fns[fns.length - 1] ? fn(data) : fn(next, data);
};
next(data);
};
Felix.queue([
function (next) {
console.log(0);
setTimeout(next, 1000);
},
function (next) {
console.log(1);
window.addEventListener('click', function listener(e) {
e.currentTarget.removeEventListener(e.type, listener);
return next(e);
});
},
function (data) {
console.log(`You clicked the ${data.target.tagName}.`);
}
]);
// Log: 0
/* 一秒後 */
// Log: 1
/* 點擊後 */
// Log: You clicked the BODY.
執行到第一個函式時,不管點擊幾次都不會觸發事件,因為監聽器要等到第二個函式執行時才會被建立。
差不多也到尾聲了,接下來我們要介紹的是函式庫的靜態方法。
如果對文章有任何疑問,也歡迎在下方提問和建議!
我是 Felix,我們明天再見!