碰到一道题: for(var i=0;i<2;i++){ setTimeout(function(){ console.log(i); },100) } //输出结果为:2 2 for(let i=0;i<2;i++){ setTimeout(function(){ console.log(i); },100) } //输出结果为:0 1 我们先从第一个for循环说起,setTImeout是异步执行的 因此setTImeout在异步队列中,需要等待同步队列(for循环)执行完成后才可进行, 此…
先看下面两段代码 for (let i = 0; i < 5; i++) { setTimeout(function () { console.log(i) }, 2000) } for (var i = 0; i < 5; i++) { setTimeout(function () { console.log(i) }, 2000) } 一个是输出0 1 2 3 4一个是输出5个5 为什么let的i,在setTimeout里的匿名函数,i取的还是块级作用域里的i? 一个假设是let的循环中,…
我在前一篇讨论let与var区别的博客中,顺带一笔带过了let与var在for循环中的不同表现,虽然解释了是块级作用域的影响,但具体是怎么去影响的呢,我尝试的去理解了下,这篇博客主要从for循环步骤拆分的角度去理解两者的区别.  一.一个简单的for循环问题与我思考后产生的问题 还是这段代码,分别用var与let去声明变量,得到的却是完全不同的结果,为什么?如果让你把这个东西清晰的讲给别人听,怎么去描述呢? //使用var声明,得到3个3 var a = []; for (var i = 0;…
let和var区别: for(var i=0;i<5;i++){ setTimeout(()=>{ console.log(i);//5个5 },100) } console.log(i); console.log('=============') for(let j=0;j<5;j++){ setTimeout(()=>{ console.log(j);//0,1,2,3,4 },100) } console.log(j);//报错 j is not defined;…
正常情况下  i++和++i是有区别的: 前者是:先引用,后增加, 后者是:先增加,后引用, 但是在for循环中: for(var i=0;i<10;i++){ System.out.println(i); }的执行流程是: for(var i=0;i<10){ System.out.println(i); i++; } 而for(var i=0;i<10;++i){ System.out.println(i); }的执行流程依然是: for(var i=0;i<10;){ Sys…
int[] array = new int[4]; for(int i = 0; i < array.length; i++){ array[i] = (int)(Math.random() * 10); for(int j = 0; j < i; j++){ if(array[i] == array[j]){ //相同就重取随机数 i--; break; } } } 以上是一段取四个不相等随机数的代码,这里的 i-- 是这段代码的核心. 在内层for循环中,一旦 array[i] == ar…
break相当于循环中的GOTO,需避免使用. 下面是一个break使用例子. 找出第一个months小于7的项目. const cats = [ { name: 'Mojo', months: 84 }, { name: 'Mao-Mao', months: 34 }, { name: 'Waffles', months: 4 }, { name: 'Pickles', months: 6 } ] const isKitten = cat => cat.months < 7 var firs…
var有三种声明的情形: var声明的全局变量 var在函数范围内声明的局部变量 eval中声明的全局变量. 首先, 1.2种情形var声明的变量是无法删除的. 尽管var声明的全局变量是属于window对象的属性(在浏览器中),但依然是无法删除的,因为这种属性的configurable=false,因此不能delete掉. 局部变量就更不用说了,连var变量依附的对象都不知道在哪里,肯定无法删除. 而eval('var a = 1')看似和直接var是一样的效果(当然是在全局作用执行eval)…
今天在h5开发app的过程中遇到了一个js问题,function的执行问题 在js中声明函数function有这两种方法 var A=function(){...} 或者 function A(){...} 第一种称之为变量引用函数,因为js允许函数作为一个值传递给变量,第二种是直接声明式函数 一直以为这两种没什么区别,然而,今天在使用过程中发现,当我使用第一种方式声明function的时候,如果如下这样: document.getElementById("xx").addEventL…
目录 引言 一.var 二.let 三.const 四.function 五.总结 引言        在学习javascript的过程中,变量是无时无刻不在使用的.那么相对应的,变量声明方法也如是.变量是由自己决定,但变量声明方法是早已经定义好的.那么在使用变量之前,了解变量声明方法,就变得尤为重要.在ES6推出之前,最常用的声明变量方法就是var.但是由于var自身的缺陷,ES6推出了let和const替代var.虽然修正了var的缺陷,但不能改变的,是之前已经用var写了多少年的项目,这些…