function varTest() { var x = 1; if (true) { var x = 2; // 同样的变量! console.log(x); } console.log(x); } function letTest() { let x = 1; if (true) { let x = 2; // 不同的变量 console.log(x); // 2 } console.log(x); } 作用域规则 let 声明的变量只在其声明的块或子块中可用,这一点,与var相似.二者之间…
前提 ES5只有函数作用域和全局作用域,var属于ES5.let属于ES6,新增块级作用域.目的是可以写更安全的代码. The let statement declares a block scope local variable, optionally initializing it to a value. - MDN 区别 let声明的变量绑定到最近的块级作用域(用{}括起来的).var绑定到最近的函数作用域或者全局作用域(例如浏览器是window,node是global). - stack…
var 声明的变量,作用域是当前 function 没有声明的变量,直接赋值的话, 会自动创建变量 但作用域是全局的. //----------------- function doSth() { a = "AAA"; } doSth(); // 执行一次 doSth alert(a); // 可以看到 "AAA" //----------------- 如果用了 var //----------------- function doSth() { var a =…
我在前一篇讨论let与var区别的博客中,顺带一笔带过了let与var在for循环中的不同表现,虽然解释了是块级作用域的影响,但具体是怎么去影响的呢,我尝试的去理解了下,这篇博客主要从for循环步骤拆分的角度去理解两者的区别. 一.一个简单的for循环问题与我思考后产生的问题 还是这段代码,分别用var与let去声明变量,得到的却是完全不同的结果,为什么?如果让你把这个东西清晰的讲给别人听,怎么去描述呢? //使用var声明,得到3个3 var a = []; for (var i = 0;…