更新時(shí)間:2022年05月16日18時(shí)06分 來(lái)源:傳智教育 瀏覽次數(shù):
首先從大多數(shù)人熟悉的編程習(xí)慣開(kāi)始,假如現(xiàn)在要使用JavaScript實(shí)現(xiàn)一個(gè)計(jì)算器的案例,如圖1-2所示。
在圖1-2中,前兩個(gè)文本框用于輸入需要計(jì)算的數(shù)值,下拉菜單用于選擇運(yùn)算符,單擊等號(hào)后,計(jì)算結(jié)果會(huì)出現(xiàn)在第三個(gè)文本框。
實(shí)現(xiàn)計(jì)算器第一種常見(jiàn)的寫(xiě)法是全局函數(shù)形式,示例代碼如demol-1.html所示。
demo1-1.html:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>模塊化開(kāi)發(fā)演變-全局函數(shù)</title> </head> <body> <input type="text" id="x"> <select name="" id="opt"> <option value="0">+</option> <option value="1">-</option> <option value="2">*</option> <option value="3">/</option> </select> <input type="text" id="y"> <button id="cal">=</button> <input type="text" id="result"> <script> //定義用于計(jì)算的函數(shù) function add(x, y) ( return parseInt(x) + parseInt(y); } function subtract(x, y) { return parseInt (x) - parseInt (y); } function multiply(x, y) { return parseInt(x) * parseInt(y); } function divide(x, y) { return parseInt(x) / parseInt(y); } //獲取所有的DOM元素 var oX = document.getElementById('x'); //第一個(gè)數(shù)值 var oY = document.getElementById('y'); //第二個(gè)數(shù)值 var oOpt = document.getElementById('opt') //獲取運(yùn)算符 var oCal = document.getElementById('cal'); //獲取等號(hào)按鈕 var oResult= document.getElementById('result') //結(jié)果數(shù)值 //為等號(hào)按鈕添加單擊事件,當(dāng)按鈕被點(diǎn)擊時(shí)調(diào)用此方法 oCal.addEventListener('click', function() { var x = oX.value.trim() var y = oY.value.trim() var opt = oOpt.value var result = 0 switch(opt) ( case '0': result = add(x, y); //加 break; case'2': result = multiply(x, y); //乘 break; case '3': result = divide (x, y); //除 break; } oResult.value = result }) </script> </body> </html>
在上述代碼中,首先獲取需計(jì)算的數(shù)值、運(yùn)算符、等號(hào)按鈕和結(jié)果數(shù)值的DOM(文檔對(duì)象模型)元素,然后分別定義了4個(gè)用來(lái)計(jì)算加、減、乘、除的函數(shù),最后為等號(hào)按鈕添加單擊事件,通過(guò)switch語(yǔ)句判斷調(diào)用哪個(gè)計(jì)算方法。
全局函數(shù)這種編程方式很常見(jiàn),但是不可取,因?yàn)樗械淖兞亢秃瘮?shù)都暴露在全局,無(wú)法保證全局變量不與其他模塊的變量發(fā)生沖突。另外,全局函數(shù)形成的模塊成員之間看不出直接關(guān)系。
北京校區(qū)