请问老师这里为什么计算结果是undefined
来源:4-6 第五次修改--开放与封闭原则
不明道理
2020-07-19 11:25:16
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Document</title> <style> body{ background-color: #eee; /*position: relative;*/ } #calculator{ width: 600px; margin:0 auto; position: absolute; top:50%; margin-top: -31px; left:50%; margin-left: -300px; } </style> </head> <body> <div id="calculator"> <p> <input type="text" class="formerInput" value="1"> <span class="sign">+</span> <input type="text" class="laterInput" value="1"> <span>=</span> <span class="resultOutput">2</span> </p> <p> <input type="button" value="+" class='btn' title='add'> <input type="button" value="-" class='btn' title='subtract'> <input type="button" value="x" class='btn' title='multiply'> <input type="button" value="÷" class='btn' title='divide'> <input type="button" value="%" class='btn' title='mod'> </p> </div> <script> //获取元素 var wrapElem = document.querySelector('#calculator'); var calculatorElem = { formerInput: wrapElem.querySelector('.formerInput'), sign: wrapElem.querySelector('.sign'), laterInput: wrapElem.querySelector('.laterInput'), resultOutput: wrapElem.querySelector('.resultOutput'), btns: wrapElem.querySelectorAll('.btn') } function each(array, fn) { for (var i = 0; i < array.length; i++) { fn(array[i]) } } each(calculatorElem.btns, function(elem) { elem.onclick = function() { updataSign(this.value); outputResult(operate(this.title, calculatorElem.formerInput.value, calculatorElem.laterInput.value)); } }); //更新符号 function updataSign(symbol) { calculatorElem.sign.innerHTML = symbol; } function operate(name, num1, num2) { if (!operation[name]) throw new Error('不存在名为' + name + '的运算方法'); operation[name](num1, num2); //计算结果为undefined //return operation[name](num1, num2); } var operation = { add: function(num1, num2) { return +num1 + +num2; }, subtract: function(num1, num2) { return num1 - num2; }, multiply: function(num1, num2) { return num1 * num2; }, divide: function(num1, num2) { return num1 / num2; }, mod:function(num1,num2){ return num1 % num2; } } //输出结果 function outputResult(result) { calculatorElem.resultOutput.innerHTML = result; } </script> </body> </html>
______________________________________________________________________________________________________
function operate(name, num1, num2) {
if (!operation[name]) throw new Error('不存在名为' + name + '的运算方法');
operation[name](num1, num2); //计算结果为undefined
//return operation[name](num1, num2);
}
operate()函数没有return 的时候计算结果是undefined
但是我的理解执行operation[name](num1, num2);这段代码的时候,name实参为this.title。比如点击‘+’按钮,这里name的值为add,即这行代码执行的时候为add(calculatorElem.formerInput.value,calculatorElem.laterInput.value);
而
var operation = {
add: function(num1, num2) {
return +num1 + +num2;
},
函数是有返回值的,所以operate()函数应该不用return
1回答
好帮手慕码
2020-07-19
同学你好,是因为operate方法没有返回值,所以计算结果为undefined。另,同学理解的不太正确,return是不会传递。
虽然在operate方法中,调用operation[name],operation中返回值,是可以得出计算结果的:
但是,点击事件elem.onclick调用operate方法的时候,也需要返回值,不过这里没有设置,所以无法输出计算结果。
同学可以再理解一下。祝学习愉快~
相似问题