在for循环中 var 和 let的区别
<script> //var方式的循环 for (var i=0; i<3; i++){ //要循环执行的代码 } console.log(i); //输出3 //let方式的循环 for (let ii=0; ii<3; ii++){ //要循环执行的代码 } console.log(ii); //报错 ii is not defined </script>
为什么会出现上述情况呢?
拆解来看其内部的执行过程
以下是代码var方式的for循环执行过程
var i=0 {i=0 /*执行循环内部代码*/} {i=1 /*执行循环内部代码*/} {i=2 /*执行循环内部代码*/} {i=3 /*结束循环 不执行循环内代码*/} console.log(3)
以下是代码let方式的for循环执行过程
{let ii=0 /*执行循环内部代码*/} {let ii=1 /*执行循环内部代码*/} {let ii=2 /*执行循环内部代码*/} {let ii=3 /*结束循环 不执行循环内代码*/} console.log(ii) //此时ii会报错未定义
作用
使用let可以解决一些特殊的问题
比如经常用在事件绑定中
使用var的循环绑定事件,等循环完 i的值等于最后的那次循环,所以只能在中间把i的值寄放在元素的属性里或者数组里
而使用let 则不用 因为let相当于在每个循环的块中 都声明了一个变量 都是独立的
相关推荐
javascript原生js实现html中checkbox复选框按shift多选/全选/反选 取被勾选的id纯原生JavaScript代码 无需任何库整理后 可以直接拿来用的代码<input type='checkbox' name='cateid[]'> <
array.pop()和 array.shift()用法 javascript 数组删除成员方法:Array.pop() //移除数组中的最后一个元素并返回该元素。如果数组为空 则返回undefined Array.shift() //移除数组中的第一个元素并返回该元素例子:<scri
javascript设置网页 cookies和取cookies//取cookies function getCookieByName(name){ for(item of document.cookie.split(';')){ if(it
html左右布局 原生javascript实现分割条 可拖动分隔条利用浮动+margin实现 左右布局 并用js实现可拖动分隔条 并用cookies记住宽度代码:<style> body{margin:0px;padding:0px;} .body{he
javascript取元素高度 宽度 水平位置 垂直位置包括边框element.offsetHeight 返回元素的高度。 (包括边框)element.offsetWidth 返回元素的宽度。 element.offsetLeft 返回元素的水平
javascript parseint()函数用法 - 字符串到整数定义和用法parseInt() 函数可解析一个字符串,并返回一个整数。当参数 radix 的值为 0,或没有设置该参数时,parseInt() 会根据 string 来判断数字的基数。当忽略参数 ra
javascript 解析json解析 遍历代码:obj=JSON.parse('{"id":"8","home":"beijing","uid&
javascript array.slice() 方法slice 方法 (Array)返回一个数组的一段。arrayObj.slice(start, [end])参数arrayObj必选项。一个 Array 对象。start必选项。arrayObj 中所
javascript合并数组 :concat方法用法例子:<script> a = new Array(1,2,3); b = "JScript"; c = new Array(42, "VBScript&q
javascript constructor 属性constructor 属性表示创建对象的函数。object.constructor必需的 object是对象或函数的名称。说明constructor 属性是所有具有 prototype 的对象的成员