这块是什么意思,老师给每个地方注释一下呗
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>计算器</title>
<style>
body{
background-color: #eee;
}
.calculator{
margin: 200px 0 0 330px;
}
</style>
</head>
<body>
<div id="calculator" class="calculator">
<p>
<input type="text" class="formeInput" value="20">
<span class="sign">+</span>
<input type="text" class="laterInput" value="10">
<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="×" class="btn" title="multiply">
<input type="button" value="÷" class="btn" title="divide">
</p>
</div>
<script>
// //第一次改写
// //获取元素
// var getElem = function(selector){
// return document.querySelector(selector);
// }
// var getElems = function(selector){
// return document.querySelectorAll(selector);
// }
// // 第一个文本框
// var formeInput = getElem(".formeInput");
// // 符号
// var sign = getElem(".sign");
// // 第二个文本框
// var laterInput = getElem(".laterInput");
// // 等于值
// var resultOutput = getElem(".resultOutput");
// // 按钮
// var btn = getElems(".btn");
// btn[0].onclick = addHandler;
// btn[1].onclick = subtractHandler;
// btn[2].onclick = multiplyHandler;
// btn[3].onclick = divideHandler;
// function addHandler(){
// sign.innerHTML = "+";
// resultOutput.innerHTML = +formeInput.value + +laterInput.value;
// }
// function subtractHandler(){
// sign.innerHTML = "-";
// resultOutput.innerHTML = +formeInput.value - +laterInput.value;
// }
// function multiplyHandler(){
// sign.innerHTML = "×";
// resultOutput.innerHTML = +formeInput.value * +laterInput.value;
// }
// function divideHandler(){
// sign.innerHTML = "÷";
// resultOutput.innerHTML = +formeInput.value / +laterInput.value;
// }
// //第二次改写-循环
// //获取元素
// var getElem = function(selector){
// return document.querySelector(selector);
// }
// var getElems = function(selector){
// return document.querySelectorAll(selector);
// }
// // 第一个文本框
// var formeInput = getElem(".formeInput");
// // 符号
// var sign = getElem(".sign");
// // 第二个文本框
// var laterInput = getElem(".laterInput");
// // 等于值
// var resultOutput = getElem(".resultOutput");
// // 按钮
// var btn = getElems(".btn");
// for(var i=0;i<btn.length;i++){
// btn[i].onclick = function(){
// switch(this.title){
// case "add":
// addHandler();break;
// case "subtract":
// subtractHandler();break;
// case "multiply":
// multiplyHandler();break;
// case "divide":
// divideHandler();break;
// }
// }
// }
// // btn[0].onclick = addHandler;
// // btn[1].onclick = subtractHandler;
// // btn[2].onclick = multiplyHandler;
// // btn[3].onclick = divideHandler;
// function addHandler(){
// sign.innerHTML = "+";
// resultOutput.innerHTML = +formeInput.value + +laterInput.value;
// }
// function subtractHandler(){
// sign.innerHTML = "-";
// resultOutput.innerHTML = +formeInput.value - +laterInput.value;
// }
// function multiplyHandler(){
// sign.innerHTML = "×";
// resultOutput.innerHTML = +formeInput.value * +laterInput.value;
// }
// function divideHandler(){
// sign.innerHTML = "÷";
// resultOutput.innerHTML = +formeInput.value / +laterInput.value;
// }
// 第三次改写-提取函数
//获取元素
var getElem = function(selector){
return document.querySelector(selector);
}
var getElems = function(selector){
return document.querySelectorAll(selector);
}
// 第一个文本框
var formeInput = getElem(".formeInput");
// 符号
var sign = getElem(".sign");
// 第二个文本框
var laterInput = getElem(".laterInput");
// 等于值
var resultOutput = getElem(".resultOutput");
// 按钮
var btn = getElems(".btn");
each(btn,function(index,elem){
elem.onclick = function(){
switch(this.title){
case "add":
addHandler();break;
case "subtract":
subtractHandler();break;
case "multiply":
multiplyHandler();break;
case "divide":
divideHandler();break;
}
}
});
function each(array,fn){
for(var i=0;i<array.length;i++){
fn(i,array[i]);
}
}
//封装一个加减乘除的函数
function updateSign(symbol){
sign.innerHTML = symbol;
}
updateSign("+");
updateSign("-");
updateSign("×");
updateSign("÷");
//封装一个算法的函数
function add(num1,num2){
return +num1 + +num2;
}
function subtract(num1,num2){
return num1 - num2;
}
function multiply(num1,num2){
return num1 * num2;
}
function divide(num1,num2){
return num1 / num2;
}
//封装一个结果的函数
function outputResult(result){
resultOutput.innerHTML = result;
}
//加
function addHandler(){
updateSign("+");
outputResult(add(formeInput.value,laterInput.value))
}
//减
function subtractHandler(){
updateSign("-");
outputResult(subtract(formeInput.value,laterInput.value))
}
//乘
function multiplyHandler(){
updateSign("×");
outputResult(multiply(formeInput.value,laterInput.value))
}
//除
function divideHandler(){
updateSign("÷");
outputResult(divide(formeInput.value,laterInput.value))
}
</script>
</body>
</html>
47
收起
正在回答
2回答
同学你好,解答如下:
1、注释如下:
// 封装for循环为each函数。第一个参数传入的是数组,第二个参数传入的是一个函数。
function each(array, fn) {
// console.log(fn) 可以打印看下
for (var i = 0; i < array.length; i++) {
//fn是和each的function是同一个函数。将fn回调函数作为一个整体,当作第二个参数传给了each函数
fn(i, array[i]);
}
}
// 调用each方法,传入两个参数,一个是array->btn;一个是函数fn->function(index, elem){}
each(btn, function(index, elem) {
// 函数有两个参数,一个是索引,一个是4个按钮
elem.onclick = function() {
// 通过switch方法实现 根据不同条件,调用不同方法
switch (this.title) {
case "add":
addHandler();
break;
case "subtract":
subtractHandler();
break;
case "multiply":
multiplyHandler();
break;
case "divide":
divideHandler();
break;
}
}
});2、为什么要用fn?函数得先调用才会执行,定义了一个each函数,先使用each()调用并传入两个实参。each的实参把值赋值给实参。然后fn就是一个匿名函数,函数中调用了fn()就会为元素绑定点击事件了可 参考下图:

3、视频中这样的操作, 其实是想传达一个实践中推荐的编程方法,即组件化。 可能用于现在的计算机项目里面,有一些多余。 但是实际中换成是一个大型的项目,可能拆分封装成小的函数会更好,一方面可读性和逻辑性更强, 当团队开发的时候,其他的同事来看我们的代码,就不需要去深入掰清楚每一行代码代表的含义, 只需要通过函数名就能够知道实现什么功能, 节约阅读效率。
如果我的回答帮到了你,欢迎采纳,祝学习愉快~
宝慕林3013065
2020-06-04 17:54:22

还有这个地方为啥要用fn呢,感觉这么写完之后比上一个循环的代码量要多了呢,有啥意义吗
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星