let const var区别

let, const, var区别

在es5中:只有全局作用域,函数作用域,没有跨级作用域概念
es6中新增 块级作用域,一个{}代表块级作用域,包括for语句,if语句的{}
let:块级作用域,只能在块级作用域中访问,不能跨函数访问
const:不能跨块级作用域访问,定义时一定要初始化,且不能改变
var:函数作用域,不能跨函数访问

ES6可以用let定义块级作用域变量

在ES6之前,我们都是用var来声明变量,而且JS只有函数作用域和全局作用域,没有块级作用域,所以{}限定不了var声明变量的访问范围。

{var a = 10}
console.log(a)//10

ES6新增的let,可以声明块级作用域的变量。

{let a = 10}
console.log(a) //VM268:1 Uncaught ReferenceError: a is not defined

let 配合for循环的独特应用

for (var i=0;i<10;i++){
    setTimeout(()=>{// 同步注册回调函数到 异步的 宏任务队列。
        console.log(i)// 执行此代码时,同步代码for循环已经执行完成
    },0)
}
//10 10 ...
// i虽然在全局作用域声明,但是在for循环体局部作用域中使用的时候,变量会被固定,不受外界干扰。
for (let i=0;i<10;i++){
    setTimeout(()=>{
        console.log(i)//  i 是循环体内局部作用域,不受外界影响。
    },0)
}
// 0 1 2 3 ...

let没有变量提升与暂时性死区

用let声明的变量,不存在变量提升。而且要求必须 等let声明语句执行完之后,变量才能使用,不然会报Uncaught ReferenceError错误。
在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”(temporal dead zone,简称 TDZ)。

let变量不能重复声明

图片说明

图片说明

总结:

ES6的let让js真正拥有了块级作用域,也是向这更安全更规范的路走,虽然加了很多约束,但是都是为了让我们更安全的使用和写代码。

全部评论

相关推荐

1 1 评论
分享
牛客网
牛客企业服务