作业检查 和疑问解答

来源:3-13 编程练习

与民桐乐

2022-06-02 20:57:19

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
</style>
</head>
<body>
<ul>
<li>HTML</li>
<li>CSS</li>
<li>JavaScript</li>
<li>jquery</li>
<li>HTML5</li>
<li>CSS3</li>
<li>ES6</li>
</ul>
<script type="text/javascript">
// 补充代码
var oli = document.querySelectorAll('li')
for (let i =0 ; i< oli.length;i++){
let text = oli[i].innerHTML
oli[i].onmouseenter = function(){
oli[i].style.color = 'red';
oli[i].style.fontSize = 'x-large';
oli[i].innerHTML = text + "我是第" + (i+1) +"个";
}
oli[i].onmouseleave = function(){
oli[i].style.color = '';
oli[i].style.fontSize = '';
oli[i].innerHTML = text  ;
}
}
</script>
</body>
</html>



问题描述

let text = oli[i].innerHTML 如果改为var text ,为什么每个离开都会成为li的最后一项内容,能否解答当是var的时候原理。
相关截图:


https://img.mukewang.com/climg/6298b3810903404e03000207.jpg


写回答

1回答

好帮手慕星星

2022-06-04

同学你好,代码实现效果很棒!

针对提问回复:

如果let改为var,那么text变量是全局的。for循环会先执行完毕。那么oli[i].innerHTML中的i值也就是最后一次循环的i值,获取的是es6内容。所以每次离开都是es6 。let会形成块级作用域,每次循环获取的内容都是当前的,所以离开的时候会保持一致。

祝学习愉快!

1

前端工程师

前端入门如同写字,如果你不知道从哪开始,那就选择前端(含Vue3.x,React17,TS)

20327 学习 · 17877 问题

查看课程