萬盛學電腦網

 萬盛學電腦網 >> 腳本專題 >> javascript >> 簡單的JavaScript互斥鎖分享

簡單的JavaScript互斥鎖分享

 這篇文章主要介紹了簡單的JavaScript互斥鎖的相關資料,需要的朋友可以參考下

去年有幾個項目需要使用JavaScript互斥鎖,所以寫了幾個類似的,這是其中一個:     復制代碼 代碼如下: //Published by Indream Luo //Contact: [email protected] //Version: Chinese 1.0.0   !function ($) {     window.indream = window.indream || {};     $.indream = indream;       indream.async = {         //         //鎖         //lock: 鎖的編號         //action: 解鎖後執行的方法         //         lock: function (lock, action) {             $.indream.async.waitings[lock] = $.indream.async.waitings[lock] || [];             $.indream.async.waitings[lock].push(action);             //如果該鎖未被使用,則當前action阻塞該鎖             if (!$.indream.async.lockStatus[lock] && action) {                 $.indream.async.lockStatus[lock] = true;                 if (arguments.length > 2) {                     var args = 'arguments[2]';                     for (var i = 3; i < arguments.length; i++) {                         args += ', arguments[' + i + ']';                     }                     eval('$.indream.async.action.call(action, ' + args + ')');                 } else {                     $.indream.async.action.call(action);                 }             }         },         //         //解鎖         //lock: 鎖的編號         //         releaseLock: function (lock) {             $.indream.async.waitings[lock].shift();             //如果等待隊列有對象,則執行等待隊列,否則解鎖             if ($.indream.async.waitings[lock].length) {                 $.indream.async.waitings[lock][0]();             } else {                 $.indream.async.lockStatus[lock] = false;             }         },         //         //鎖的狀態         //         lockStatus: [],         //         //等待事件完成         //lock:鎖編碼,相同的編碼將被整合成一個序列,觸發時同時觸發         //         wait: function (lock, action) {             $.indream.async.waitings[code] = $.indream.async.waitings[code] || [];             $.indream.async.waitings[code].push(action);         },         //         //等待序列         //         waitings: [],         //         //數據緩存         //         action: {             //             //監聽和回調的相關方法             //             callback: {                 //                 //監聽                 //                 listen: function (actionName, callback) {                     var list = $.indream.async.action.callback.list;                     list[actionName] = list[actionName] || [];                     list[actionName].push(callback);                 },                 //                 //回調                 //                 call: function (actionName, args) {                     var list = $.indream.async.action.callback.list;                     if (list[actionName] && list[actionName].length) {                         for (var i in list[actionName]) {                             $.indream.async.action.call(list[actionName][i], args);                         }                     }                 },                 //                 //現有的回調列表                 //                 list: []             },             //             //根據方法是否存在和參數是否存在選擇適當的執行方式             //             call: function (action) {                 if (action) {                     if (arguments.length > 1) {                         var args = 'arguments[1]';                         for (var i = 2; i < arguments.length; i++) {                             args += ', arguments[' + i + ']';                         }                         eval('action(' + args + ')');                     } else {                         action();                     }                 }             }         }     } }(window.jQuery);       一個互斥鎖的幾個元素是:   •鎖與解鎖 •等待隊列 •執行方法 以上鎖的用法:     復制代碼 代碼如下: //定義鎖的名稱 var lock = 'scrollTop()'; //使用鎖 $.indream.async.lock(lock, function () {     var scrollTop = $(window).scrollTop();     var timer;     var fullTime = 100;     for (timer = 0; timer <= fullTime; timer += 10) {         setTimeout('$(window).scrollTop(' + (scrollTop
copyright © 萬盛學電腦網 all rights reserved