最近很多前端的朋友去面试被问到let和var的区别,其实阮一峰老师的ES6中已经很详细介绍了 ES6 新增了 先看个 题目1:var a = 99; // 全局变量af(); // f是函数,虽然定义在调用的后面,但是函数声明会提升到作用域的顶部。 console.log(a); // a=>99, 此时是全局变量的afunction f() { console.log(a); // 当前的a变量是下面变量a声明提升后,默认值undefined var a = 10; console.log(a); // a => 10}// 输出结果:undefined1099 如果以上题目有理解困难的童鞋,请系统的看一下老马的免费JS高级视频教程。 ES6可以用let定义块级作用域变量在ES6之前,我们都是用var来声明变量,而且JS只有函数作用域和全局作用域,没有块级作用域,所以
ES6新增的 { let i = 9; // i变量只在 花括号内有效!!!} console.log(i); // Uncaught ReferenceError: i is not defined let 配合for循环的独特应用
如果把 // i虽然在全局作用域声明,但是在for循环体局部作用域中使用的时候,变量会被固定,不受外界干扰。for (let i = 0; i < 10; i++) { setTimeout(function() { console.log(i); // i 是循环体内局部作用域,不受外界影响。 }, 0);}// 输出结果:0 1 2 3 4 5 6 7 8 9 let没有变量提升与暂时性死区用
let变量不能重复声明let不允许在相同作用域内,重复声明同一个变量。否则报错: 例如: let a = 0;let a = 'sss';// Uncaught SyntaxError: Identifier 'a' has already been declared 总结ES6的let让js真正拥有了块级作用域,也是向这更安全更规范的路走,虽然加了很多约束,但是都是为了让我们更安全的使用和写代码。 顺便打个小广告,老马目前专注于做线下的IT全栈实习,不8000就业不还实习费,如果有需要的请关注一下: aicoder.com 老马录制的免费在线视频教程: qtxh.ke.qq.com |
|
来自: 蜗牛之窝 > 《Javascript》