使用内部函数避免全局变量
我们可以通过增加传递给mt的参数数量来除掉所有的全局变量。但代替方案,我们将使mt变成kd的内部函数。作为一个内部函数,mt能访问kd的所有变量。
unction kd(e) { var ev = e || event, el = ev.target || ev.srcElement, cnt, code = ev.keyCode, gk, id = el.id, ctn = lt.id.substring(1);
function mt() { var nextTab; if (!ev.ctrlKey && !ev.altKey) { nextTab = parseInt(ctn) + ev.shiftKey ? -1 : 1; if (!nextTab) { d.getElementById('mk').focus(); } else if (nextTab < 8 ) { t(d.getElementById('v' + nextTab)); } } }
if (code == 13) { return; } else if ((code == 191 || code == 222) && id != 'fp') { _ffs = 1; gk = 0; } else if ((code < 31 || code > 41) && (code < 16 || code > 18) && code != 9 && code != 8 ) { gk = 1; } else { gk = 0; } if (!_ffs && (id == 'fp' || id == 'st')) { if (code == 9) { if (box.value == '' || (box.value != '' && (at == 1 || ev.shiftKey))) { mt(); } else if (id == 'st' && box.value != '' && at == 0) { at = 1; mt(); } } else if (id == 'fp' && gk == 0 && (box.value == '' && st == 0) && !ev.shiftKey && !ev.ctrlKey && !ev.altKey) { d.getElementById('mk').focus(); d.getElementById('mk').blur(); } else if (gk == 1) { at = 0; } } else if ((id == 'mk2' && box.value != '' && ev.shiftKey && code == 9) || (id == 'm6' && !ev.shiftKey && code == 9)){ d.getElementById('mk').focus(); } else if (!_ffs && gk == 1 && el.type != 'text' && !ev.ctrlKey && !ev.altKey) { box.value = ''; box.focus(); } }
在函数kd中,从两个地方调用函数mt。通过使它成为一个内部函数,我们能有效的减少kd所用到的全局变量的数目,这将降低了干扰其他组件的可能性。kd依旧是一个烂摊子,但它现在不是一无是处的烂摊子。
原文:Douglas Crockford 的 The Elements of JavaScript Style Part Two: Idioms
本文链接:http://www.blueidea.com/tech/web/2008/5369.asp
出处:随网之舞
责任编辑:bluehearts
上一页 Javascript风格要素 [2] 下一页
◎进入论坛网页制作、WEB标准化版块参加讨论,我还想发表评论。
|