使用內(nèi)部函數(shù)避免全局變量
我們可以通過(guò)增加傳遞給mt的參數(shù)數(shù)量來(lái)除掉所有的全局變量。但代替方案,我們將使mt變成kd的內(nèi)部函數(shù)。作為一個(gè)內(nèi)部函數(shù),mt能訪問(wèn)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(); } }
在函數(shù)kd中,從兩個(gè)地方調(diào)用函數(shù)mt。通過(guò)使它成為一個(gè)內(nèi)部函數(shù),我們能有效的減少kd所用到的全局變量的數(shù)目,這將降低了干擾其他組件的可能性。kd依舊是一個(gè)爛攤子,但它現(xiàn)在不是一無(wú)是處的爛攤子。
原文:Douglas Crockford 的 The Elements of JavaScript Style Part Two: Idioms
本文鏈接:http://www.95time.cn/tech/web/2008/5369.asp
出處:隨網(wǎng)之舞
責(zé)任編輯:bluehearts
上一頁(yè) Javascript風(fēng)格要素 [2] 下一頁(yè)
◎進(jìn)入論壇網(wǎng)頁(yè)制作、WEB標(biāo)準(zhǔn)化版塊參加討論,我還想發(fā)表評(píng)論。
|