自己写的一个javascript 智能绑定callback 而且调用运行的函数。主要用于异步请求的 ajax中:
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> </head> <body> <script> /** * @author default7@zbphp.com * @date 2014-10-17 * @description 通过传入的參数获取出函数名称 * @param args * @returns {string} */ function getFunctionName(args) { var fName = ''; if (typeof args == 'string' && /^[a-zA-Z0-9]+$/.test(args)) { fName = args; } else { var fBody = ''; if (typeof args == 'object' && args.callee) { fBody = args.callee.toString(); } else if (typeof args == 'string') { fBody = args; } if (fBody) { var m = fBody.match(/functions+([a-zA-Z0-9]+)s*(/i); if (m && m[1]) { fName = m[1]; } } } return fName; } var gCallback = []; function addCallback(fName, callback) { if (typeof fName == 'string' && typeof window[fName] == 'function' && typeof callback == 'function') { if (typeof gCallback[fName] == 'undefined') { gCallback[fName] = []; } gCallback[fName].push(callback); } } /** * @description 运行绑定的函数 * @param args */ function execCallback(args) { var fName = getFunctionName(args); if (fName && window[fName] && gCallback[fName]) { for (var i in gCallback[fName]) { gCallback[fName][i](); } gCallback[fName] = [];//仅仅调用一次 } } </script> <script> function a() { alert('a'); } function b() { alert('b'); } function c() { alert('c'); } function d() { alert('d'); } function initUser() { execCallback(arguments); } addCallback('initUser', a); addCallback('initUser', b); addCallback('initUser', c); initUser(); addCallback('initUser', d); initUser(); </script> </body> </html>