批改状态:合格
老师批语:
//定义一个变量num,并赋值为10;let num = 10;//进行打印console.log(num);
let与var有所不同:
(function(){{let i = 2;}alert(i);})();
我们的大括号就属于一个代码块,只要是代码块以内的都可以使用到,如果在外面就获取不到了,此时输出的i是没有值的。
(function(){var i = 9;//不允许let i = 10;//不允许let i = 11;console.log(i);})();
var arr3 = [];for(var i = 0;i<10;i++){arr3[i] = function(){alert(i)}}arr3[3]();
变量i是var声明的,在全局内都有效,
所以每次循环,新值都会覆盖旧值,导致最后输出的是最后一轮的i的值。
我们如何解决这种问题呢?
以下通过闭包解决
var arr = [];for(var i = 0;i<10;i++){(function sum(val){arr[i] = function(){alert(val);}})(i)}arr[9]();
当然,这种方法是不是麻烦了点!我们可以通过let定义变量来解决这个问题
var arr2 = [];for(let i = 0;i<10;i++){arr2[i] = function(){alert(i)}}arr2[3]();
变量i是let声明的,当前的i只在本轮循环有效,
所以每一次循环的i其实都是一个新的变量,所以最后输出的是3.
<script type="module" src="./js/index.js"></script>
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号